package io.ebean.text.csv; import io.ebean.EbeanServer; /** * Provides callback methods for customisation of CSV processing. * <p> * You can provide your own CsvCallback implementation to customise the CSV * processing. It is expected that the DefaultCsvCallback provides a good base * class that you can extend. * </p> * * @param <T> */ public interface CsvCallback<T> { /** * The processing is about to begin. * <p> * Typically the callback will create a transaction, set batch mode, batch * size etc. * </p> */ void begin(EbeanServer server); /** * Read the header row. * <p> * This is only called if {@link CsvReader#setHasHeader(boolean, boolean)} has * been set to true. * </p> * * @param line the header line content. */ void readHeader(String[] line); /** * Check that the row should be processed - return true to process the row or * false to ignore the row. Gives ability to handle bad data... empty rows etc * and ignore it rather than fail. */ boolean processLine(int row, String[] line); /** * Called for each bean after it has been loaded from the CSV content. * <p> * This allows you to process the bean however you like. * </p> * <p> * When you use a CsvCallback the CsvReader *WILL NOT* create a transaction * and will not save the bean for you. You have complete control and must do * these things yourself (if that is want you want). * </p> * * @param row the index of the content being processed * @param line the content that has been used to load the bean * @param bean the entity bean after it has been loaded from the csv content */ void processBean(int row, String[] line, T bean); /** * The processing has ended successfully. * <p> * Typically the callback will commit the transaction. * </p> */ void end(int row); /** * The processing has ended due to an error. * <p> * This gives the callback the opportunity to rollback the transaction if one * was created. * </p> * * @param row the row that the error has occured on * @param e the error that occured */ void endWithError(int row, Exception e); }