/** * AnalyzerBeans * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.eobjects.analyzer.descriptors; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eobjects.analyzer.beans.api.Analyzer; import org.eobjects.analyzer.beans.api.Filter; import org.eobjects.analyzer.beans.api.Renderer; import org.eobjects.analyzer.beans.api.Transformer; /** * A simple descriptor provider with a method signature suitable externalizing * class names of analyzer and transformer beans. For example, if you're using * the Spring Framework you initialize this descriptor provider as follows: * * <pre> * <bean id="descriptorProvider" class="org.eobjects.analyzer.descriptors.SimpleDescriptorProvider"> * <property name="analyzerClassNames"> * <list> * <value>org.eobjects.analyzer.beans.StringAnalyzer</value> * <value>org.eobjects.analyzer.beans.valuedist.ValueDistributionAnalyzer</value> * ... * </list> * </property> * <property name="transformerClassNames"> * <list> * <value>org.eobjects.analyzer.beans.TokenizerTransformer</value> * ... * </list> * </property> * <property name="rendererClassNames"> * <list> * <value>org.eobjects.analyzer.result.renderer.DefaultTextRenderer</value> * ... * </list> * </property> * </bean> * </pre> * * */ public class SimpleDescriptorProvider extends AbstractDescriptorProvider { private List<AnalyzerBeanDescriptor<?>> _analyzerBeanDescriptors = new ArrayList<AnalyzerBeanDescriptor<?>>(); private List<TransformerBeanDescriptor<?>> _transformerBeanDescriptors = new ArrayList<TransformerBeanDescriptor<?>>(); private List<RendererBeanDescriptor<?>> _rendererBeanDescriptors = new ArrayList<RendererBeanDescriptor<?>>(); private List<FilterBeanDescriptor<?, ?>> _filterBeanDescriptors = new ArrayList<FilterBeanDescriptor<?, ?>>(); public SimpleDescriptorProvider() { this(true); } public SimpleDescriptorProvider(boolean autoDiscover) { super(autoDiscover); } public void addAnalyzerBeanDescriptor(AnalyzerBeanDescriptor<?> analyzerBeanDescriptor) { _analyzerBeanDescriptors.add(analyzerBeanDescriptor); } public void addTransformerBeanDescriptor(TransformerBeanDescriptor<?> transformerBeanDescriptor) { _transformerBeanDescriptors.add(transformerBeanDescriptor); } public void addRendererBeanDescriptor(RendererBeanDescriptor<?> rendererBeanDescriptor) { _rendererBeanDescriptors.add(rendererBeanDescriptor); } public void addFilterBeanDescriptor(FilterBeanDescriptor<?, ?> descriptor) { _filterBeanDescriptors.add(descriptor); } @Override public List<AnalyzerBeanDescriptor<?>> getAnalyzerBeanDescriptors() { return _analyzerBeanDescriptors; } public void setAnalyzerBeanDescriptors(List<AnalyzerBeanDescriptor<?>> descriptors) { _analyzerBeanDescriptors = descriptors; } @Override public List<TransformerBeanDescriptor<?>> getTransformerBeanDescriptors() { return _transformerBeanDescriptors; } public void setTransformerBeanDescriptors(List<TransformerBeanDescriptor<?>> transformerBeanDescriptors) { _transformerBeanDescriptors = transformerBeanDescriptors; } @Override public List<RendererBeanDescriptor<?>> getRendererBeanDescriptors() { return _rendererBeanDescriptors; } public void setRendererBeanDescriptors(List<RendererBeanDescriptor<?>> rendererBeanDescriptors) { _rendererBeanDescriptors = rendererBeanDescriptors; } @Override public Collection<FilterBeanDescriptor<?, ?>> getFilterBeanDescriptors() { return _filterBeanDescriptors; } public void setFilterBeanDescriptors(List<FilterBeanDescriptor<?, ?>> filterBeanDescriptors) { _filterBeanDescriptors = filterBeanDescriptors; } public void setAnalyzerClassNames(Collection<String> classNames) throws ClassNotFoundException { for (String className : classNames) { @SuppressWarnings("unchecked") Class<? extends Analyzer<?>> c = (Class<? extends Analyzer<?>>) Class.forName(className); AnalyzerBeanDescriptor<?> descriptor = getAnalyzerBeanDescriptorForClass(c); if (descriptor == null || !_analyzerBeanDescriptors.contains(descriptor)) { addAnalyzerBeanDescriptor(Descriptors.ofAnalyzer(c)); } } } public void setTransformerClassNames(Collection<String> classNames) throws ClassNotFoundException { for (String className : classNames) { @SuppressWarnings("unchecked") Class<? extends Transformer<?>> c = (Class<? extends Transformer<?>>) Class.forName(className); TransformerBeanDescriptor<?> descriptor = getTransformerBeanDescriptorForClass(c); if (descriptor == null || !_transformerBeanDescriptors.contains(descriptor)) { addTransformerBeanDescriptor(Descriptors.ofTransformer(c)); } } } public void setRendererClassNames(Collection<String> classNames) throws ClassNotFoundException { for (String className : classNames) { @SuppressWarnings("unchecked") Class<? extends Renderer<?, ?>> c = (Class<? extends Renderer<?, ?>>) Class.forName(className); RendererBeanDescriptor<?> descriptor = getRendererBeanDescriptorForClass(c); if (descriptor == null || !_rendererBeanDescriptors.contains(descriptor)) { addRendererBeanDescriptor(Descriptors.ofRenderer(c)); } } } public void setFilterClassNames(Collection<String> classNames) throws ClassNotFoundException { for (String className : classNames) { @SuppressWarnings("unchecked") Class<? extends Filter<?>> c = (Class<? extends Filter<?>>) Class.forName(className); FilterBeanDescriptor<?, ?> descriptor = getFilterBeanDescriptorForClassUnbounded(c); if (descriptor == null || !_filterBeanDescriptors.contains(descriptor)) { addFilterBeanDescriptor(Descriptors.ofFilterUnbound(c)); } } } }