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;
}
}
}