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
11
12
13
14
15
16
17
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;
39 filters[QueryFilteredJob.COLLECTION_NAME] = null;
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 }