LoadCatalogEnrichedExtrasItemReader.java

package com.sintia.ffl.admin.optique.catalogue.batch.reader.loadcatalog;

import com.sintia.ffl.admin.optique.catalogue.batch.reporter.LoadCatalogReporter;
import com.sintia.ffl.admin.optique.catalogue.models.EnrichedExtrasCSV;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.stereotype.Component;

import java.nio.file.Paths;

/**
 * Read raw data from a csv file and convert them to {@link EnrichedExtrasCSV}
 *
 * @author jumazet
 */
@Component
@StepScope
public class LoadCatalogEnrichedExtrasItemReader extends FlatFileItemReader<EnrichedExtrasCSV> {

	private String[] columnsName = new String[] { "maker", "provider", "extrasCode", "extrasName", "extrasType",
			"extraTypeRepo", "actionCodeDelta" };

	@Autowired
	private LoadCatalogReporter reporter;

	private String fileName;

	public LoadCatalogEnrichedExtrasItemReader(
			@Value("#{jobParameters[extrasFileName]}") String fileName,
			@Value("${local.resources.directory}") String localResourcesDirectory,
			@Value("${catalog.corrected.directory}") String specificDirectory) {
		super();
		this.fileName = fileName;
		String separator = System.getProperty("file.separator");
		String localPath = localResourcesDirectory + separator + specificDirectory;
		this.setResource(new FileSystemResource(Paths.get(localPath)
				.resolve(fileName)
				.toString()));

		DefaultLineMapper<EnrichedExtrasCSV> lineMapper = new DefaultLineMapper<>();

		DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
		tokenizer.setNames(columnsName);
		tokenizer.setDelimiter(";");
		lineMapper.setLineTokenizer(tokenizer);

		BeanWrapperFieldSetMapper<EnrichedExtrasCSV> fieldMapper = new BeanWrapperFieldSetMapper<>();
		fieldMapper.setTargetType(EnrichedExtrasCSV.class);
		lineMapper.setFieldSetMapper(fieldMapper);

		// Skip the first line (ie the header line)
		this.setLinesToSkip(1);
		this.setEncoding("UTF-8");
		this.setLineMapper(lineMapper);

	}

	@Override
	public void doOpen()
			throws Exception {
		try {
			super.doOpen();
		} catch (Exception e) {
			this.reporter.addError("Erreur à l'ouverture du fichier '" + this.fileName + "' : " + e.getMessage());
			// re-throws the exception to stop the job process
			throw e;
		}
	}
}