PeremptionVerresAbsentsItemWriter.java

package com.sintia.ffl.admin.optique.catalogue.batch.writer;

import com.sintia.ffl.admin.optique.catalogue.batch.reporter.PeremptionVerresAbsentsReporter;
import com.sintia.ffl.admin.optique.catalogue.models.GlassesCSV;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.file.FlatFileItemWriter;
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;
import java.util.List;

/**
 * Simulate expiration for missing glasses by adding them to a file that will
 * list all the missing glasses
 * 
 * @author jumazet
 */
@Component
@StepScope
public class PeremptionVerresAbsentsItemWriter extends FlatFileItemWriter<GlassesCSV> {

	@Autowired
	private PeremptionVerresAbsentsReporter peremptionVerresAbsentsReporter;

	private static final String HEADER = "c_opto_code_verre;l_modele;c_opto_code_fabricant;c_opto_code_distributeur";

	public PeremptionVerresAbsentsItemWriter(
			@Value("#{jobParameters[simulatedGlassesToExpireFileName]}") String resultFileName,
			@Value("${local.resources.directory}") String localResourcesDirectory,
			@Value("${glasses.missing.obsolete.directory}") String glassesMissingDirectory) {

		String resourcePath = Paths.get(localResourcesDirectory)
				.resolve(glassesMissingDirectory)
				.resolve(resultFileName)
				.toString();
		this.setResource(new FileSystemResource(resourcePath));

		this.setLineAggregator(new PeremptionVerresAbsentsLineAggregator());
		this.setShouldDeleteIfExists(true);
		StringHeaderWriter header = new StringHeaderWriter(HEADER);
		this.setHeaderCallback(header);
	}

	@Override
	public void write(List<? extends GlassesCSV> items)
			throws Exception {
		super.write(items);

		peremptionVerresAbsentsReporter.addNbModeleVerreAbsent(items.size());
	}
}