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 }