ChargementItemWriter.java

package com.sintia.ffl.admin.optique.specifique.isea.writer;

import com.sintia.ffl.admin.optique.specifique.isea.helpers.ModeleVerreIteHelper;
import com.sintia.ffl.admin.optique.specifique.isea.helpers.SupplementVerreIteHelper;
import com.sintia.ffl.admin.optique.specifique.isea.helpers.VerreSupplementAssoIteHelper;
import com.sintia.ffl.admin.optique.specifique.isea.models.FabricantCSV;
import com.sintia.ffl.admin.optique.specifique.isea.models.FournisseurCSV;
import com.sintia.ffl.admin.optique.specifique.isea.models.SupplementCSV;
import com.sintia.ffl.admin.optique.specifique.isea.models.VerreCSV;
import com.sintia.ffl.admin.optique.specifique.isea.models.VerreSupplementAssoCSV;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

@Component
@StepScope
@Slf4j
public class ChargementItemWriter implements Tasklet, StepExecutionListener {
	
	@Autowired
	private ModeleVerreIteHelper modeleVerreHelper;
	
	@Autowired
	private SupplementVerreIteHelper supplementVerreIteHelper;
	
	@Autowired
	private VerreSupplementAssoIteHelper verreSupplementAssoIteHelper;
	
	List<VerreCSV> verreCSVList;
	List<SupplementCSV> supplementCSVList;
	List<VerreSupplementAssoCSV> verreSupplementAssoCSVList;
	List<FabricantCSV> fabricantCSVList;
	List<FournisseurCSV> fournisseurCSVList;
	
	@Override
	public void beforeStep(StepExecution stepExecution) {
		// Do nothing
	}
	
	@Override
	public ExitStatus afterStep(StepExecution stepExecution) {
		return ExitStatus.COMPLETED;
	}
	
	@Override
	public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
		log.info("ChargementItemWriter - execute()");
		Date date = (Date) stepContribution.getStepExecution().getJobExecution().getJobParameters().getParameters().get("scriptDate").getValue();
		log.info("Date : " + date);
		verreCSVList = (List<VerreCSV>) stepContribution.getStepExecution().getJobExecution().getExecutionContext().get("verres");
		log.info("verreCSVList.size() : " + verreCSVList.size());
		supplementCSVList = (List<SupplementCSV>) stepContribution.getStepExecution().getJobExecution().getExecutionContext().get("supplements");
		log.info("supplementCSVList.size() : " + supplementCSVList.size());
		verreSupplementAssoCSVList = (List<VerreSupplementAssoCSV>) stepContribution.getStepExecution().getJobExecution().getExecutionContext().get("verresupplements");
		log.info("verreSupplementAssoCSVList.size() : " + verreSupplementAssoCSVList.size());
		fabricantCSVList = (List<FabricantCSV>) stepContribution.getStepExecution().getJobExecution().getExecutionContext().get("fabricants");
		log.info("fabricantCSVList.size() : " + fabricantCSVList.size());
		fournisseurCSVList = (List<FournisseurCSV>) stepContribution.getStepExecution().getJobExecution().getExecutionContext().get("fournisseurs");
		log.info("fournisseurCSVList.size() : " + fournisseurCSVList.size());


		// Create and Write in DB Modeleverre
		log.info("Create and Write in DB Modeleverre");
		modeleVerreHelper.process(verreCSVList, verreSupplementAssoCSVList, fabricantCSVList.get(0).getCodeFabricant(),
				fournisseurCSVList.get(0).getCodeFournisseur(), date);
		
		// Create and Write in DB SupplementVerre
		log.info("Create and Write in DB SupplementVerre");
		supplementVerreIteHelper.process(supplementCSVList, fabricantCSVList.get(0).getCodeFabricant(),
				fournisseurCSVList.get(0).getCodeFournisseur(), date);
		
		// Create and Write in DB SupplementVerreAsso
		log.info("Create and Write in DB SupplementVerreAsso");
		verreSupplementAssoIteHelper.process(verreSupplementAssoCSVList, date);

		log.info("ChargementItemWriter - execute() - END");
		return RepeatStatus.FINISHED;
	}
	
}