EnrichedExtrasItemWriter.java

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

import com.sintia.ffl.admin.optique.catalogue.models.EnrichedExtrasCSV;
import com.sintia.ffl.admin.optique.catalogue.util.Constants;
import com.sintia.ffl.admin.optique.catalogue.util.FileNameNotMatchException;
import com.sintia.ffl.admin.optique.catalogue.util.FileUtil;
import com.sintia.ffl.admin.optique.services.services.FabricantService;
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;

/**
 * Take in input a data in the format {@link EnrichedExtrasCSV} and save them in
 * a CSV file
 *
 * @author jumazet
 */
@Component
@StepScope
public class EnrichedExtrasItemWriter extends FlatFileItemWriter<EnrichedExtrasCSV> {

	private static final String HEADER = "Code fabricant;Code Fournisseur;Code supplément;Nom supplément;Type;Type référentiel;Code action delta";

	public EnrichedExtrasItemWriter(
			@Value("#{jobParameters[extrasFileName]}") String fileName,
			@Value("${local.resources.directory}") String localDirectory, @Autowired FileUtil fileUtil,
			@Autowired FabricantService fabricantService,
			@Value("${catalog.enriched.directory}") String enrichedCatalogWithAgreementDirectory,
			@Value("${catalog.unlist.directory}") String enrichedCatalogWithoutAgreementDirectory)
			throws FileNameNotMatchException {

		String resultFileName = fileUtil.convertToCorrectedExtrasFileName(fileName);

		String cOptoCodeFabricant = fileUtil.extractMakerFromExtrasFileName(fileName, Constants.INITAL_FILE);
		String resourcePath = "";
		if (fabricantService.isMakerWithAgreement(cOptoCodeFabricant)) {
			resourcePath = Paths.get(localDirectory)
					.resolve(enrichedCatalogWithAgreementDirectory)
					.resolve(resultFileName)
					.toString();
		} else {
			resourcePath = Paths.get(localDirectory)
					.resolve(enrichedCatalogWithoutAgreementDirectory)
					.resolve(resultFileName)
					.toString();
		}

		this.setResource(new FileSystemResource(resourcePath));

		this.setLineAggregator(new EnrichedExtrasLineAggregator());

		this.setShouldDeleteIfExists(true);

		StringHeaderWriter header = new StringHeaderWriter(HEADER);
		this.setHeaderCallback(header);
	}

}