package fr.openwide.core.imports.table.common.event; import org.slf4j.Logger; 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 Logger} and may (or may not, depending on constructor parameters) 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 LoggerTableImportEventHandler extends AbstractRecordingTableImportEventHandler { private final Logger logger; public LoggerTableImportEventHandler(Logger logger) { this(new Slf4jTableImportEventMessageFormatter(), logger); } public LoggerTableImportEventHandler(TableImportNonFatalErrorHandling errorHandling, Logger logger) { this(errorHandling, new Slf4jTableImportEventMessageFormatter(), logger); } public LoggerTableImportEventHandler(ITableImportEventMessageFormatter formatter, Logger logger) { this(TableImportNonFatalErrorHandling.THROW_ON_CHECK, formatter, logger); } public LoggerTableImportEventHandler(TableImportNonFatalErrorHandling errorHandling, ITableImportEventMessageFormatter formatter, Logger logger) { super(errorHandling, formatter); this.logger = logger; } @Override protected void record(ExcelImportErrorEvent event, TableImportLocation location, String formattedMessage) { logger.error(formattedMessage); } @Override protected void record(ExcelImportInfoEvent event, TableImportLocation location, String formattedMessage) { if (TableImportEvent.WARNING.equals(event)) { logger.warn(formattedMessage); } else if (TableImportEvent.DEBUG.equals(event)) { logger.debug(formattedMessage); } else { logger.info(formattedMessage); } } }