View Javadoc

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  * *** Centre de Calcul de l'IN2P3 - Lyon (France) ***
17  * ***             http://cc.in2p3.fr/             ***
18  * ***************************************************
19  * File:   JobAdaptorDescriptor
20  * Author: Sylvain Reynaud (sreynaud@in2p3.fr)
21  * Date:   21 juin 2007
22  * ***************************************************
23  * Description:                                      */
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              // set class
42              m_classes.put(adaptor.getType(), adaptorClasses[i]);
43  
44              // set usage
45              Usage usage = adaptor.getUsage();
46              if (usage != null) {
47                  m_usages.put(adaptor.getType(), usage);
48              }
49  
50              // set defaults
51              m_defaults.put(adaptor.getType(), AdaptorDescriptors.getDefaultsMap(adaptor));
52  
53              // set XML
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          // add default job service
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 }