Skip to content

Commit

Permalink
reworked the node group extension so it applies to all extension points
Browse files Browse the repository at this point in the history
  • Loading branch information
chenson42 committed Jul 9, 2008
1 parent 635b3e9 commit 8ba1091
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 40 deletions.
Expand Up @@ -9,7 +9,6 @@
import org.jumpmind.symmetric.load.IBatchListener;
import org.jumpmind.symmetric.load.IColumnFilter;
import org.jumpmind.symmetric.load.IDataLoaderFilter;
import org.jumpmind.symmetric.load.INodeGroupDataLoaderFilter;
import org.jumpmind.symmetric.load.IReloadListener;
import org.jumpmind.symmetric.load.ITableColumnFilter;
import org.jumpmind.symmetric.service.IDataExtractorService;
Expand All @@ -34,58 +33,70 @@ public class ExtensionProcessor implements BeanFactoryPostProcessor {

@SuppressWarnings("unchecked")
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
Map<String, IExtensionPoint> plugins = beanFactory.getBeansOfType(IExtensionPoint.class);
for (IExtensionPoint plugin : plugins.values()) {
if (plugin.isAutoRegister()) {
if (plugin instanceof IBatchListener) {
dataLoaderService.addBatchListener((IBatchListener) plugin);
}

if (plugin instanceof INodeGroupDataLoaderFilter) {
Map<String, IExtensionPoint> extensions = beanFactory.getBeansOfType(IExtensionPoint.class);
for (IExtensionPoint ext : extensions.values()) {
if (ext.isAutoRegister()) {
boolean registerExtension = false;
if (ext instanceof INodeGroupExtensionPoint) {
String nodeGroupId = parameterService.getNodeGroupId();
INodeGroupDataLoaderFilter filter = (INodeGroupDataLoaderFilter) plugin;
String[] ids = filter.getNodeGroupIdsToApplyTo();
INodeGroupExtensionPoint nodeExt = (INodeGroupExtensionPoint) ext;
String[] ids = nodeExt.getNodeGroupIdsToApplyTo();
if (ids != null) {
for (String targetNodeGroupId : ids) {
if (nodeGroupId.equals(targetNodeGroupId)) {
dataLoaderService.addDataLoaderFilter(filter);
registerExtension = true;
}
}
}
} else if (plugin instanceof IDataLoaderFilter) {
dataLoaderService.addDataLoaderFilter((IDataLoaderFilter) plugin);
} else {
registerExtension = true;
}

if (plugin instanceof IColumnFilter) {
if (plugin instanceof ITableColumnFilter) {
ITableColumnFilter tableColumnFilter = (ITableColumnFilter) plugin;
if (tableColumnFilter.getTables() != null) {
String[] tables = tableColumnFilter.getTables();
for (String table : tables) {
dataLoaderService.addColumnFilter(table, tableColumnFilter);
}
}

} else {
throw new UnsupportedOperationException("IColumnFilter cannot be auto registered. Please use "
+ ITableColumnFilter.class.getName() + " instead.");
}
if (registerExtension) {
registerExtension(ext);
}
}
}

if (plugin instanceof IReloadListener) {
dataService.addReloadListener((IReloadListener) plugin);
}
}

if (plugin instanceof IParameterFilter) {
parameterService.setParameterFilter((IParameterFilter) plugin);
}
private void registerExtension(IExtensionPoint ext) {

if (ext instanceof IBatchListener) {
dataLoaderService.addBatchListener((IBatchListener) ext);
}

if (ext instanceof IDataLoaderFilter) {
dataLoaderService.addDataLoaderFilter((IDataLoaderFilter) ext);
}

if (plugin instanceof IExtractorFilter) {
dataExtractorService.addExtractorFilter((IExtractorFilter) plugin);
if (ext instanceof IColumnFilter) {
if (ext instanceof ITableColumnFilter) {
ITableColumnFilter tableColumnFilter = (ITableColumnFilter) ext;
if (tableColumnFilter.getTables() != null) {
String[] tables = tableColumnFilter.getTables();
for (String table : tables) {
dataLoaderService.addColumnFilter(table, tableColumnFilter);
}
}

} else {
throw new UnsupportedOperationException("IColumnFilter cannot be auto registered. Please use "
+ ITableColumnFilter.class.getName() + " instead.");
}
}

if (ext instanceof IReloadListener) {
dataService.addReloadListener((IReloadListener) ext);
}

if (ext instanceof IParameterFilter) {
parameterService.setParameterFilter((IParameterFilter) ext);
}

if (ext instanceof IExtractorFilter) {
dataExtractorService.addExtractorFilter((IExtractorFilter) ext);
}
}

public void setDataLoaderService(IDataLoaderService dataLoaderService) {
Expand Down
@@ -0,0 +1,11 @@
package org.jumpmind.symmetric.ext;

/**
* This is a DataLoaderFilter that will only be applied to the node groups that
* are supported.
*/
public interface INodeGroupExtensionPoint {

public String[] getNodeGroupIdsToApplyTo();

}
@@ -1,10 +1,11 @@
package org.jumpmind.symmetric.load;

import org.jumpmind.symmetric.ext.INodeGroupExtensionPoint;

/**
* This is a DataLoaderFilter that will only be applied to the node groups that are supported.
* This is a DataLoaderFilter that will only be applied to the node groups that
* are supported.
*/
public interface INodeGroupDataLoaderFilter extends IDataLoaderFilter {
public interface INodeGroupDataLoaderFilter extends IDataLoaderFilter, INodeGroupExtensionPoint {

public String[] getNodeGroupIdsToApplyTo();

}

0 comments on commit 8ba1091

Please sign in to comment.