1 package fr.in2p3.jsaga.engine.config;
2
3 import fr.in2p3.jsaga.EngineProperties;
4 import org.ogf.saga.SagaObject;
5
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.net.URL;
9 import java.util.Properties;
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class TimeoutConfiguration {
24 private static TimeoutConfiguration _instance;
25 private Properties m_timeout;
26
27 public static TimeoutConfiguration getInstance() throws ConfigurationException {
28 if (_instance == null) {
29 _instance = new TimeoutConfiguration();
30 }
31 return _instance;
32 }
33 private TimeoutConfiguration() throws ConfigurationException {
34
35 m_timeout = new Properties();
36
37
38 URL timeoutCfgURL = EngineProperties.getURL(EngineProperties.JSAGA_TIMEOUT);
39 if (timeoutCfgURL != null) {
40 try {
41 InputStream timeoutCfgStream = timeoutCfgURL.openStream();
42 m_timeout.load(timeoutCfgStream);
43 timeoutCfgStream.close();
44 } catch (IOException e) {
45 throw new ConfigurationException("Failed to load configuration file: "+timeoutCfgURL, e);
46 }
47 }
48 }
49
50 public float getTimeout(Class itf, String methodName, String protocolScheme) throws ConfigurationException {
51
52 String methodKey = itf.getName()+"#"+methodName;
53 String protocolKey = methodKey+"|"+protocolScheme;
54 String timeout = m_timeout.getProperty(protocolKey);
55 if (timeout == null) {
56 timeout = m_timeout.getProperty(methodKey);
57 }
58
59
60 if (timeout!=null && !timeout.trim().equals("")) {
61 try {
62 return Float.parseFloat(timeout);
63 } catch (NumberFormatException e) {
64 throw new ConfigurationException("Configured timeout is not a float for: "+protocolKey, e);
65 }
66 } else {
67 return SagaObject.WAIT_FOREVER;
68 }
69 }
70 }