View Javadoc

1   package fr.in2p3.jsaga.engine.job.monitor.request;
2   
3   import fr.in2p3.jsaga.adaptor.job.SubState;
4   import fr.in2p3.jsaga.adaptor.job.monitor.*;
5   import org.ogf.saga.error.*;
6   
7   import java.util.Calendar;
8   
9   /* ***************************************************
10  * *** Centre de Calcul de l'IN2P3 - Lyon (France) ***
11  * ***             http://cc.in2p3.fr/             ***
12  * ***************************************************
13  * File:   JobStatusRequestor
14  * Author: Sylvain Reynaud (sreynaud@in2p3.fr)
15  * Date:   11 janv. 2008
16  * ***************************************************
17  * Description:                                      */
18  /**
19   *
20   */
21  public class JobStatusRequestor {
22      private JobMonitorAdaptor m_adaptor;
23  
24      public JobStatusRequestor(JobMonitorAdaptor adaptor) {
25          m_adaptor = adaptor;
26      }
27  
28      public JobStatus getJobStatus(String nativeJobId) throws NotImplementedException, TimeoutException, NoSuccessException {
29          if (nativeJobId != null) {
30              try {
31                  if (m_adaptor instanceof QueryIndividualJob) {
32                      return ((QueryIndividualJob) m_adaptor).getStatus(nativeJobId);
33                  } else if (m_adaptor instanceof QueryListJob) {
34                      JobStatus[] statusArray = ((QueryListJob) m_adaptor).getStatusList(new String[]{nativeJobId});
35                      return findJobStatus(statusArray, nativeJobId);
36                  } else if (m_adaptor instanceof QueryFilteredJob) {
37                      Object[] filters = new Object[3];
38                      filters[QueryFilteredJob.USER_ID] = null;           //todo: set filter value
39                      filters[QueryFilteredJob.COLLECTION_NAME] = null;   //todo: set filter value
40                      Calendar cal = Calendar.getInstance();
41                      cal.add(Calendar.DAY_OF_YEAR, -1);
42                      filters[QueryFilteredJob.START_DATE] = cal.getTime();
43                      JobStatus[] statusArray = ((QueryFilteredJob) m_adaptor).getFilteredStatus(filters);
44                      return findJobStatus(statusArray, nativeJobId);
45                  } else {
46                      throw new NotImplementedException("Querying job status not implemented for adaptor: "+ m_adaptor.getClass().getName());
47                  }
48              } catch(RuntimeException e) {
49                  throw new NoSuccessException("Failed to get status for job: "+nativeJobId, e);
50              }
51          } else {
52              return new JobStatus(nativeJobId, new Integer(0), "Unknown"){
53                  public String getModel() {return "Unknown";}
54                  public SubState getSubState() {return SubState.NEW_CREATED;}
55              };
56          }
57      }
58  
59      private static JobStatus findJobStatus(JobStatus[] array, String nativeJobId) throws NoSuccessException {
60          for (int i=0; array!=null && i<array.length; i++) {
61              if (array[i].getNativeJobId().equals(nativeJobId)) {
62                  return array[i];
63              }
64          }
65          throw new NoSuccessException("Job not found: "+nativeJobId);
66      }
67  }