1 package fr.in2p3.jsaga.impl.job.service;
2
3 import fr.in2p3.jsaga.adaptor.job.control.JobControlAdaptor;
4 import fr.in2p3.jsaga.adaptor.job.control.description.JobDescriptionTranslator;
5 import fr.in2p3.jsaga.adaptor.job.control.manage.ListableJobAdaptor;
6 import fr.in2p3.jsaga.adaptor.job.monitor.JobMonitorAdaptor;
7 import fr.in2p3.jsaga.engine.job.monitor.JobMonitorService;
8 import fr.in2p3.jsaga.impl.AbstractSagaObjectImpl;
9 import fr.in2p3.jsaga.impl.job.description.AbstractJobDescriptionImpl;
10 import fr.in2p3.jsaga.impl.job.instance.JobImpl;
11 import fr.in2p3.jsaga.impl.job.staging.mgr.DataStagingManager;
12 import fr.in2p3.jsaga.impl.job.staging.mgr.DataStagingManagerFactory;
13 import fr.in2p3.jsaga.sync.job.SyncJobService;
14 import org.ogf.saga.SagaObject;
15 import org.ogf.saga.error.*;
16 import org.ogf.saga.job.*;
17 import org.ogf.saga.session.Session;
18 import org.ogf.saga.url.URL;
19 import org.w3c.dom.Document;
20
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.UUID;
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public abstract class AbstractSyncJobServiceImpl extends AbstractSagaObjectImpl implements SyncJobService {
38 protected static final String DEFAULT_HOST = "";
39 protected static final boolean DEFAULT_INTERACTIVE = false;
40
41 public URL m_resourceManager;
42 public JobControlAdaptor m_controlAdaptor;
43 public JobMonitorService m_monitorService;
44 private JobDescriptionTranslator m_translator;
45
46
47 public AbstractSyncJobServiceImpl(Session session, URL rm, JobControlAdaptor controlAdaptor, JobMonitorService monitorService, JobDescriptionTranslator translator) {
48 super(session);
49 m_resourceManager = rm;
50 m_controlAdaptor = controlAdaptor;
51 m_monitorService = monitorService;
52 m_translator = translator;
53 }
54
55
56 public SagaObject clone() throws CloneNotSupportedException {
57 AbstractSyncJobServiceImpl clone = (AbstractSyncJobServiceImpl) super.clone();
58 clone.m_resourceManager = m_resourceManager;
59 clone.m_controlAdaptor = m_controlAdaptor;
60 clone.m_monitorService = m_monitorService;
61 clone.m_translator = m_translator;
62 return clone;
63 }
64
65 public Job createJobSync(JobDescription jobDesc) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
66
67 String uniqId = UUID.randomUUID().toString();
68
69
70 DataStagingManager stagingMgr = DataStagingManagerFactory.create(m_controlAdaptor, jobDesc, uniqId);
71 jobDesc = stagingMgr.modifyJobDescription(jobDesc);
72
73
74 Document jsdlDOM;
75 if (jobDesc instanceof AbstractJobDescriptionImpl) {
76 jsdlDOM = ((AbstractJobDescriptionImpl) jobDesc).getJSDL();
77 } else {
78 throw new NotImplementedException("Unsupported JobDescription implementation: "+jobDesc.getClass().getName());
79 }
80
81
82 String nativeJobDesc = m_translator.translate(jsdlDOM, uniqId);
83
84
85 return new JobImpl(m_session, nativeJobDesc, jobDesc, stagingMgr, uniqId, this);
86 }
87
88 public Job runJobSync(String commandLine, String host, boolean interactive) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
89 try {
90
91 JobDescription desc = JobFactory.createJobDescription(JSAGA_FACTORY);
92 desc.setAttribute(JobDescription.EXECUTABLE, commandLine);
93 desc.setAttribute(JobDescription.INTERACTIVE, ""+interactive);
94 desc.setVectorAttribute(JobDescription.CANDIDATEHOSTS, new String[]{""+host});
95
96
97 Job job = this.createJobSync(desc);
98 job.run();
99 return job;
100 } catch (IncorrectStateException e) {
101 throw new NoSuccessException(e);
102 } catch (DoesNotExistException e) {
103 throw new NoSuccessException(e);
104 }
105 }
106 public Job runJobSync(String commandLine, String host) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
107 return this.runJobSync(commandLine, host, DEFAULT_INTERACTIVE);
108 }
109 public Job runJobSync(String commandLine, boolean interactive) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
110 return this.runJobSync(commandLine, DEFAULT_HOST, interactive);
111 }
112 public Job runJobSync(String commandLine) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, TimeoutException, NoSuccessException {
113 return this.runJobSync(commandLine, DEFAULT_HOST, DEFAULT_INTERACTIVE);
114 }
115
116 public List<String> listSync() throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, TimeoutException, NoSuccessException {
117 JobMonitorAdaptor monitorAdaptor = m_monitorService.getAdaptor();
118 if (monitorAdaptor instanceof ListableJobAdaptor) {
119 String[] array = ((ListableJobAdaptor)monitorAdaptor).list();
120 List<String> list = new ArrayList<String>();
121 for (int i=0; array!=null && i<array.length; i++) {
122 String sagaJobId = "["+m_resourceManager.getString()+"]-["+array[i]+"]";
123 list.add(sagaJobId);
124 }
125 return list;
126 } else {
127 throw new NotImplementedException("Not implemented yet...");
128 }
129 }
130
131 public Job getJobSync(String nativeJobId) throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, DoesNotExistException, TimeoutException, NoSuccessException {
132 DataStagingManager stagingMgr = DataStagingManagerFactory.create(m_controlAdaptor);
133 return new JobImpl(m_session, nativeJobId, stagingMgr, this);
134 }
135
136 public JobSelf getSelfSync() throws NotImplementedException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, TimeoutException, NoSuccessException {
137 throw new NotImplementedException("Not implemented by the SAGA engine", this);
138 }
139 }