package gov.samhsa.consent2share.infrastructure.report.configurer;
import gov.samhsa.consent2share.infrastructure.report.AbstractReportConfig;
import gov.samhsa.consent2share.infrastructure.report.ReportFormat;
import gov.samhsa.consent2share.infrastructure.report.ReportImageResolver;
import gov.samhsa.consent2share.infrastructure.report.ReportParameterConfigurerTask;
import gov.samhsa.consent2share.infrastructure.report.ReportProps;
import java.util.Map;
import java.util.function.Supplier;
import net.sf.jasperreports.engine.JRDataSource;
/**
* This task returns the {@code imageParameterNameInTemplate=imageAbsolutePath }
* mappings to be added to the report model/parameters. It depends on
* {@link ReportImageResolver} to resolve the absolute paths for webpath or
* classpath locations. If the report format is {@link ReportFormat#HTML}, it is
* resolved by {@link ReportImageResolver#webpath(String)}. Otherwise, it is
* resolved by {@link ReportImageResolver#classpath(String)}.
*
* @see ReportImageResolver
*/
public class SetImageMappingsTask implements ReportParameterConfigurerTask {
/** The report image resolver supplier. */
private final Supplier<ReportImageResolver> reportImageResolverSupplier;
/**
* Instantiates a new sets the image mappings task.
*
* @param reportImageResolverSupplier
* the report image resolver supplier
*/
public SetImageMappingsTask(
Supplier<ReportImageResolver> reportImageResolverSupplier) {
super();
this.reportImageResolverSupplier = reportImageResolverSupplier;
}
/*
* (non-Javadoc)
*
* @see
* gov.samhsa.consent2share.infrastructure.report.ReportParameterConfigurerTask
* #configure(gov.samhsa.consent2share.infrastructure.report.ReportProps,
* gov.samhsa.consent2share.infrastructure.report.ReportFormat,
* net.sf.jasperreports.engine.JRDataSource)
*/
@Override
public Map<String, Object> configure(ReportProps reportProps,
ReportFormat reportFormat, JRDataSource datasource) {
final Map<String, Object> parameters = newMap();
// Add image mappings (if any)
reportProps.getImageMapping().ifPresent(
map -> map.forEach((param, name) -> {
switch (reportFormat) {
// For html, resolve image files from webpath
case HTML:
parameters.put(param, reportImageResolverSupplier.get()
.webpath(name));
break;
// For others, resolve image files from classpath
default:
parameters.put(param, reportImageResolverSupplier.get()
.classpath(name));
break;
}
}));
return parameters;
}
/**
* A factory method to create a new instance of {@code SetImageMappingsTask}
* with given {@link AbstractReportConfig}.
*
* @param reportConfig
* the report config
* @return the sets the image mappings task
*/
public static final SetImageMappingsTask newInstance(
AbstractReportConfig reportConfig) {
return new SetImageMappingsTask(() -> reportConfig
.getReportImageResolver().get());
}
}