1 package fr.in2p3.jsaga.engine.descriptors;
2
3 import fr.in2p3.jsaga.EngineProperties;
4 import fr.in2p3.jsaga.adaptor.base.usage.Usage;
5 import fr.in2p3.jsaga.adaptor.job.JobAdaptor;
6 import fr.in2p3.jsaga.adaptor.job.control.JobControlAdaptor;
7 import fr.in2p3.jsaga.adaptor.job.monitor.JobMonitorAdaptor;
8 import fr.in2p3.jsaga.engine.schema.config.*;
9 import fr.in2p3.jsaga.engine.schema.config.types.AttributeSourceType;
10 import org.ogf.saga.error.NoSuccessException;
11
12 import java.util.HashMap;
13 import java.util.Map;
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class JobAdaptorDescriptor {
28 private Map m_classes;
29 private Map m_usages;
30 private Map<String,Map> m_defaults;
31 protected Execution[] m_xml;
32
33 public JobAdaptorDescriptor(Class[] adaptorClasses, SecurityAdaptorDescriptor securityDesc) throws IllegalAccessException, InstantiationException {
34 m_classes = new HashMap();
35 m_usages = new HashMap();
36 m_defaults = new HashMap<String,Map>();
37 m_xml = new Execution[adaptorClasses.length];
38 for (int i=0; i<adaptorClasses.length; i++) {
39 JobControlAdaptor adaptor = (JobControlAdaptor) adaptorClasses[i].newInstance();
40
41
42 m_classes.put(adaptor.getType(), adaptorClasses[i]);
43
44
45 Usage usage = adaptor.getUsage();
46 if (usage != null) {
47 m_usages.put(adaptor.getType(), usage);
48 }
49
50
51 m_defaults.put(adaptor.getType(), AdaptorDescriptors.getDefaultsMap(adaptor));
52
53
54 m_xml[i] = toXML(adaptor, securityDesc);
55 }
56 }
57
58 public Class getClass(String type) throws NoSuccessException {
59 Class clazz = (Class) m_classes.get(type);
60 if (clazz != null) {
61 return clazz;
62 } else {
63 throw new NoSuccessException("Found no job adaptor supporting type: "+type);
64 }
65 }
66
67 public Usage getUsage(String type) {
68 return (Usage) m_usages.get(type);
69 }
70
71 public Map getDefaultsMap(String scheme) {
72 return m_defaults.get(scheme);
73 }
74
75 public Execution[] getXML() {
76 return m_xml;
77 }
78
79 private static Execution toXML(JobControlAdaptor adaptor, SecurityAdaptorDescriptor securityDesc) {
80 Execution execution = new Execution();
81
82
83 execution.setType(adaptor.getType());
84 execution.setImpl(adaptor.getClass().getName());
85 if (adaptor.getSupportedSecurityCredentialClasses() != null) {
86 String[] supportedContextTypes = securityDesc.getSupportedContextTypes(adaptor.getSupportedSecurityCredentialClasses());
87 execution.setSupportedContextType(supportedContextTypes);
88 }
89 JobMonitorAdaptor monitorAdaptor = adaptor.getDefaultJobMonitor();
90 if (monitorAdaptor != null) {
91 MonitorService monitor = new MonitorService();
92 monitor.setImpl(monitorAdaptor.getClass().getName());
93 AdaptorDescriptors.setDefaults(monitor, monitorAdaptor);
94 execution.setMonitorService(monitor);
95 }
96 if (adaptor.getUsage() != null) {
97 execution.setUsage(adaptor.getUsage().toString());
98 }
99 AdaptorDescriptors.setDefaults(execution, adaptor);
100 String checkAvailability = EngineProperties.getProperty(EngineProperties.JOB_CONTROL_CHECK_AVAILABILITY);
101 if (checkAvailability != null) {
102 Attribute attr = new Attribute();
103 attr.setName(JobAdaptor.CHECK_AVAILABILITY);
104 attr.setValue(checkAvailability);
105 attr.setSource(AttributeSourceType.ENGINECONFIGURATION);
106 execution.addAttribute(attr);
107 }
108 return execution;
109 }
110 }