package com.haulmont.yarg.loaders.factory; import com.haulmont.yarg.exception.UnsupportedLoaderException; import com.haulmont.yarg.loaders.ReportDataLoader; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class DefaultLoaderFactory implements ReportLoaderFactory { public static final String GROOVY_DATA_LOADER = "groovy"; public static final String SQL_DATA_LOADER = "sql"; public static final String JSON_DATA_LOADER = "json"; protected MapReportDataLoader> dataLoaders = new HashMapReportDataLoader>(); public DefaultLoaderFactory setDataLoaders(MapReportDataLoader> dataLoaders) { this.dataLoaders.putAll(dataLoaders); return this; } public MapReportDataLoader> getDataLoaders() { return dataLoaders; } public DefaultLoaderFactory setGroovyDataLoader(ReportDataLoader dataLoader) { return registerDataLoader(GROOVY_DATA_LOADER, dataLoader); } public DefaultLoaderFactory setSqlDataLoader(ReportDataLoader dataLoader) { return registerDataLoader(SQL_DATA_LOADER, dataLoader); } public DefaultLoaderFactory setJsonDataLoader(ReportDataLoader dataLoader) { return registerDataLoader(JSON_DATA_LOADER, dataLoader); } public DefaultLoaderFactory registerDataLoader(String key, ReportDataLoader dataLoader) { dataLoaders.put(key, dataLoader); return this; } @Override public ReportDataLoader createDataLoader(String loaderType) { ReportDataLoader dataLoader = dataLoaders.get(loaderType); if (dataLoader == null) { throw new UnsupportedLoaderException(String.format("Unsupported loader type [%s]", loaderType)); } else { return dataLoader; } } }