1
2
3
4
5
6
7 package org.weda.data.impl;
8
9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12 import org.weda.data.DataProvider;
13 import org.weda.data.DataProviderFactory;
14 import org.weda.data.DataProviderRegistry;
15 import org.weda.data.DataProviderServiceException;
16
17 /**
18 *
19 * @author Mikhail Titov
20 */
21 public class DefaultDataProviderRegistry implements DataProviderRegistry{
22 private List<DataProviderFactory> config;
23 private Map<Class, DataProviderFactory> factories =
24 new HashMap<Class, DataProviderFactory>();
25
26 public void init() throws DataProviderServiceException {
27 for (DataProviderFactory factory: config){
28 Class dataIdClass = factory.getDataIdentificatorClass();
29 if (factories.containsKey(dataIdClass))
30 throw new DataProviderServiceException(
31 String.format(
32 "Data provider factory (%s) already exists for " +
33 "data identificator class (%s)"
34 , factories.get(dataIdClass).getClass().getName()
35 , dataIdClass.getName()));
36 else
37 factories.put(dataIdClass, factory);
38 }
39 }
40
41 public DataProvider getDataProvider(Object dataId)
42 throws DataProviderServiceException
43 {
44 checkDataIdentificator(dataId.getClass());
45 return factories.get(dataId.getClass()).getDataProvider(dataId);
46 }
47
48 public void checkDataIdentificator(Class dataIdClass)
49 throws DataProviderServiceException
50 {
51 if (dataIdClass==null || !factories.containsKey(dataIdClass))
52 throw new DataProviderServiceException(
53 String.format(
54 "Registry does not contains factory for " +
55 "data identificator class (%s)"
56 , (dataIdClass==null ? "null" : dataIdClass.getName())));
57 }
58
59 public void setFactories(List<DataProviderFactory> config) {
60 this.config = config;
61 }
62
63 }