1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.limmen.crs.storage.api;
17  
18  import java.util.HashMap;
19  import java.util.Iterator;
20  import java.util.Map;
21  import java.util.ServiceLoader;
22  
23  import org.limmen.crs.storage.api.exception.UnknownStorageTypeException;
24  
25  
26  public class ConfigurationStorageFactory {
27  
28     private static ConfigurationStorageFactory current = new ConfigurationStorageFactory();
29  
30     public static ConfigurationStorageFactory getInstance() {
31  
32     	return current;
33     }
34  
35     private final Map<String, ConfigurationStorage> configurationStorageMap = new HashMap<String, ConfigurationStorage>();
36  
37     private ConfigurationStorageFactory() {
38  
39     	super();
40  
41  		ServiceLoader<ConfigurationStorage> services =
42  			ServiceLoader.load(ConfigurationStorage.class);
43  
44  		Iterator<ConfigurationStorage> servicesIterator = services.iterator();
45  
46  		while (servicesIterator.hasNext()) {
47  
48  			ConfigurationStorage storage = servicesIterator.next();
49  
50  			configurationStorageMap.put(storage.getStorageType(), storage);
51  		}
52     }
53  
54     public ConfigurationStorage getStorage(String aType) throws UnknownStorageTypeException {
55  
56     	if (!configurationStorageMap.containsKey(aType)) {
57  
58     		throw new UnknownStorageTypeException();
59     	}
60  
61     	return configurationStorageMap.get(aType);
62     }
63  }