package fr.openwide.core.imports.table.common.event; import fr.openwide.core.commons.util.report.BatchReport; import fr.openwide.core.imports.table.common.event.TableImportEvent.ExcelImportErrorEvent; import fr.openwide.core.imports.table.common.event.TableImportEvent.ExcelImportInfoEvent; import fr.openwide.core.imports.table.common.event.formatter.ITableImportEventMessageFormatter; import fr.openwide.core.imports.table.common.event.formatter.Slf4jTableImportEventMessageFormatter; import fr.openwide.core.imports.table.common.location.TableImportLocation; /** * A event handler that will add errors to a {@link BatchReport} and delay exception throwing until {@link #checkNoErrorOccurred()} is called. * <p><strong>CAUTION:</string> when using this event handler, {@link #checkNoErrorOccurred()} MUST be called before attempting any action based on the imported data. * Doing otherwise will result in corrupted data. */ public class BatchReportTableImportEventHandler extends AbstractRecordingTableImportEventHandler { private final BatchReport batchReport; public BatchReportTableImportEventHandler(BatchReport batchReport) { this(new Slf4jTableImportEventMessageFormatter(), batchReport); } public BatchReportTableImportEventHandler(ITableImportEventMessageFormatter formatter, BatchReport batchReport) { super(TableImportNonFatalErrorHandling.THROW_ON_CHECK, formatter); this.batchReport = batchReport; } @Override protected void record(ExcelImportErrorEvent event, TableImportLocation location, String formattedMessage) { batchReport.error(formattedMessage); } @Override protected void record(ExcelImportInfoEvent event, TableImportLocation location, String formattedMessage) { if (TableImportEvent.WARNING.equals(event)) { batchReport.warn(formattedMessage); } else if (TableImportEvent.DEBUG.equals(event)) { batchReport.debug(formattedMessage); } else { batchReport.info(formattedMessage); } } }