View Javadoc

1   package org.jumpmind.symmetric.ext;
2   
3   import java.util.Map;
4   
5   import org.apache.commons.logging.Log;
6   import org.apache.commons.logging.LogFactory;
7   import org.jumpmind.symmetric.config.IParameterFilter;
8   import org.jumpmind.symmetric.extract.IExtractorFilter;
9   import org.jumpmind.symmetric.load.IBatchListener;
10  import org.jumpmind.symmetric.load.IColumnFilter;
11  import org.jumpmind.symmetric.load.IDataLoaderFilter;
12  import org.jumpmind.symmetric.load.IReloadListener;
13  import org.jumpmind.symmetric.load.ITableColumnFilter;
14  import org.jumpmind.symmetric.service.IDataExtractorService;
15  import org.jumpmind.symmetric.service.IDataLoaderService;
16  import org.jumpmind.symmetric.service.IDataService;
17  import org.jumpmind.symmetric.service.IParameterService;
18  import org.springframework.beans.BeansException;
19  import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
20  import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
21  
22  public class ExtensionProcessor implements BeanFactoryPostProcessor {
23  
24      static final Log logger = LogFactory.getLog(ExtensionProcessor.class);
25  
26      IDataLoaderService dataLoaderService;
27  
28      IDataService dataService;
29  
30      IDataExtractorService dataExtractorService;
31  
32      IParameterService parameterService;
33  
34      @SuppressWarnings("unchecked")
35      public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
36          Map<String, IExtensionPoint> extensions = beanFactory.getBeansOfType(IExtensionPoint.class);
37          for (IExtensionPoint ext : extensions.values()) {
38              if (ext.isAutoRegister()) {
39                  boolean registerExtension = false;
40                  if (ext instanceof INodeGroupExtensionPoint) {
41                      String nodeGroupId = parameterService.getNodeGroupId();
42                      INodeGroupExtensionPoint nodeExt = (INodeGroupExtensionPoint) ext;
43                      String[] ids = nodeExt.getNodeGroupIdsToApplyTo();
44                      if (ids != null) {
45                          for (String targetNodeGroupId : ids) {
46                              if (nodeGroupId.equals(targetNodeGroupId)) {
47                                  registerExtension = true;
48                              }
49                          }
50                      }
51                  } else {
52                      registerExtension = true;
53                  }
54  
55                  if (registerExtension) {
56                      registerExtension(ext);
57                  }
58              }
59          }
60  
61      }
62  
63      private void registerExtension(IExtensionPoint ext) {
64          
65          if (ext instanceof IBatchListener) {
66              dataLoaderService.addBatchListener((IBatchListener) ext);
67          }
68  
69          if (ext instanceof IDataLoaderFilter) {
70              dataLoaderService.addDataLoaderFilter((IDataLoaderFilter) ext);
71          }
72  
73          if (ext instanceof IColumnFilter) {
74              if (ext instanceof ITableColumnFilter) {
75                  ITableColumnFilter tableColumnFilter = (ITableColumnFilter) ext;
76                  if (tableColumnFilter.getTables() != null) {
77                      String[] tables = tableColumnFilter.getTables();
78                      for (String table : tables) {
79                          dataLoaderService.addColumnFilter(table, tableColumnFilter);
80                      }
81                  }
82  
83              } else {
84                  throw new UnsupportedOperationException("IColumnFilter cannot be auto registered.  Please use "
85                          + ITableColumnFilter.class.getName() + " instead.");
86              }
87          }
88  
89          if (ext instanceof IReloadListener) {
90              dataService.addReloadListener((IReloadListener) ext);
91          }
92  
93          if (ext instanceof IParameterFilter) {
94              parameterService.setParameterFilter((IParameterFilter) ext);
95          }
96  
97          if (ext instanceof IExtractorFilter) {
98              dataExtractorService.addExtractorFilter((IExtractorFilter) ext);
99          }
100     }
101 
102     public void setDataLoaderService(IDataLoaderService dataLoaderService) {
103         this.dataLoaderService = dataLoaderService;
104     }
105 
106     public void setDataService(IDataService dataService) {
107         this.dataService = dataService;
108     }
109 
110     public void setDataExtractorService(IDataExtractorService dataExtractorService) {
111         this.dataExtractorService = dataExtractorService;
112     }
113 
114     public void setParameterService(IParameterService parameterService) {
115         this.parameterService = parameterService;
116     }
117 
118 }