package nl.ipo.cds.etl;
import java.util.Map;
import nl.idgis.commons.jobexecutor.JobLogger;
import nl.ipo.cds.dao.attributemapping.OperationDTO;
import nl.ipo.cds.domain.DatasetFilter;
import nl.ipo.cds.domain.EtlJob;
import nl.ipo.cds.domain.FeatureType;
import nl.ipo.cds.etl.db.DBWriterFactory;
import nl.ipo.cds.etl.featurecollection.FeatureCollection;
import nl.ipo.cds.etl.filtering.FeatureClipper;
import nl.ipo.cds.etl.log.EventLogger;
import nl.ipo.cds.etl.process.DatasetMetadata;
import nl.ipo.cds.etl.theme.AttributeDescriptor;
import nl.ipo.cds.etl.theme.ThemeConfig;
import nl.ipo.cds.validation.gml.codelists.CodeListFactory;
public interface DatasetHandlers<T extends PersistableFeature> {
Class<T> getBeanClass();
DBWriterFactory<T> getDBWriterFactory(String... constColumns);
ThemeConfig<T> getThemeConfig ();
Map<AttributeDescriptor<?>, OperationDTO> getAttributeMappings (EtlJob job, FeatureType featureType);
/**
* Returns a feature clipper for the given job, or null if the geometry doesn't need clipping.
*
* @param job The job to create a feature clipper.
* @param logger The logger that can be used by the feature clipper to report errors and warnings.
* @return A feature clipper, or null.
*/
FeatureClipper getFeatureClipper (EtlJob job, JobLogger logger);
/**
* Returns a dataset filter expression for the given job, or null if the dataset doesn't need filtering.
*
* @param job The job to create a filter expression for.
* @return A dataset filter, or null.
*/
DatasetFilter getDatasetFilter (EtlJob job);
/**
* Returns a codelist factory for this dataset. The codelist factory is invoked whenever
* a codelist is needed during validation.
*
* @return A codelist factory that is able to return codelists for each codespace in this
* theme.
*/
CodeListFactory getCodeListFactory (EtlJob job);
FeatureCollection retrieveFeaturesFromBronhouder(EtlJob job, FeatureProcessor featureProcessor, final EventLogger<AbstractProcess.MessageKey> userLog, DatasetMetadata md);
}