View Javadoc

1   /*
2    * DefaultDataProviderRegistry.java
3    *
4    * Created on 15 Май 2006 г., 0:10
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  }