View Javadoc

1   package fr.in2p3.jsaga.engine.job.monitor.poll;
2   
3   import fr.in2p3.jsaga.engine.job.monitor.JobMonitorCallback;
4   import fr.in2p3.jsaga.engine.job.monitor.JobRegistry;
5   
6   import java.util.HashMap;
7   import java.util.Map;
8   
9   /* ***************************************************
10  * *** Centre de Calcul de l'IN2P3 - Lyon (France) ***
11  * ***             http://cc.in2p3.fr/             ***
12  * ***************************************************
13  * File:   AbstractJobStatusPoller
14  * Author: Sylvain Reynaud (sreynaud@in2p3.fr)
15  * Date:   10 janv. 2008
16  * ***************************************************
17  * Description:                                      */
18  /**
19   *
20   */
21  public abstract class AbstractJobStatusPoller implements JobRegistry, Runnable {
22      protected final Map<String,JobMonitorCallback> m_subscribedJobs;
23      private JobStatusPollerTask m_pollerTask;
24  
25      public AbstractJobStatusPoller() {
26          m_subscribedJobs = new HashMap<String,JobMonitorCallback>();
27      }
28  
29      public void subscribeJob(String nativeJobId, JobMonitorCallback callback) {
30          synchronized(m_subscribedJobs) {
31              boolean toBeStarted = m_subscribedJobs.isEmpty();
32  
33              // subscribe job
34              m_subscribedJobs.put(nativeJobId, callback);
35  
36              // may start timer
37              if (toBeStarted) {
38                  m_pollerTask = new JobStatusPollerTask(this);
39                  m_pollerTask.start();
40              }
41          }
42      }
43  
44      public void unsubscribeJob(String nativeJobId) {
45          synchronized(m_subscribedJobs) {
46              // unsubscribe job
47              m_subscribedJobs.remove(nativeJobId);
48  
49              // may stop timer
50              if (m_subscribedJobs.isEmpty() && m_pollerTask!=null) {
51                  m_pollerTask.stop();
52                  m_pollerTask = null;
53              }
54          }
55      }
56  }
57