ChargementItemReader.java
package com.sintia.ffl.admin.optique.specifique.isea.reader;
import com.sintia.ffl.admin.optique.services.services.DistributeurIteService;
import com.sintia.ffl.admin.optique.services.services.FabricantIteService;
import com.sintia.ffl.admin.optique.specifique.isea.models.*;
import com.sintia.ffl.admin.optique.specifique.isea.reporter.ChargementReporter;
import com.sintia.ffl.admin.optique.specifique.isea.utils.Constants;
import com.sintia.ffl.admin.optique.specifique.isea.utils.FileReaderUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.item.ExecutionContext;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
@StepScope
public class ChargementItemReader implements Tasklet, StepExecutionListener {
private static final Logger LOGGER = LoggerFactory.getLogger(ChargementItemReader.class);
@Autowired
private ChargementReporter chargementReporter;
@Autowired
private FileReaderUtil fileReaderUtil;
@Autowired
private DistributeurIteService distributeurIteService;
@Autowired
private FabricantIteService fabricantIteService;
private List<FournisseurCSV> fournisseurCSVList;
private List<FabricantCSV> fabricantCSVList;
private List<VerreCSV> verreCSVList;
private List<SupplementCSV> supplementCSVList;
private List<VerreSupplementAssoCSV> verreSupplementAssoCSVList;
@Override
public void beforeStep(StepExecution stepExecution) {
try {
List<String> fileStructureErrors = fileReaderUtil.getFileStructureErrors(fileReaderUtil.getFile());
if ( fileStructureErrors.isEmpty() ) {
List<LigneOptimeyes> fichierImporte = fileReaderUtil.processcsvfile(fileReaderUtil.getFile());
fabricantCSVList = fileReaderUtil.getListFabricants(fichierImporte);
fournisseurCSVList = fileReaderUtil.getListfournisseurs(fichierImporte);
verreCSVList = fileReaderUtil.getListverres(fichierImporte);
supplementCSVList = fileReaderUtil.getListsupplements(fichierImporte);
verreSupplementAssoCSVList = fileReaderUtil.getListverreSupplementAssos(fichierImporte);
ExecutionContext executionContext = stepExecution.getJobExecution().getExecutionContext();
executionContext.put("verres", this.verreCSVList);
executionContext.put("fournisseurs", this.fournisseurCSVList);
executionContext.put("supplements", this.supplementCSVList);
executionContext.put("fabricants", this.fabricantCSVList);
executionContext.put("verresupplements", this.verreSupplementAssoCSVList);
} else {
chargementReporter.addError(Constants.TRAITEMENT_ARRETE_CAUSE_STRUCTURE_FICHIER_INCORRECTE + " : " + String.join(" ", fileStructureErrors));
throw new Exception(Constants.TRAITEMENT_ARRETE_CAUSE_STRUCTURE_FICHIER_INCORRECTE);
}
if(verreCSVList == null && fabricantCSVList == null && fournisseurCSVList == null && supplementCSVList == null){
chargementReporter.addError(Constants.TRAITEMENT_ARRETE_CAUSE_STRUCTURE_FICHIER_INCORRECTE + " : Ni les verres, ni les fabricants, ni les fournisseurs, ni les suppléments n'ont pu être récupérés.");
throw new Exception(Constants.TRAITEMENT_ARRETE_CAUSE_STRUCTURE_FICHIER_INCORRECTE);
}
} catch (Exception e){
throw new RuntimeException(Constants.TRAITEMENT_ARRETE_CAUSE_STRUCTURE_FICHIER_INCORRECTE );
}
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
LOGGER.debug("Lecture terminée");
return ExitStatus.COMPLETED;
}
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
fournisseurCSVList = (List<FournisseurCSV>) stepContribution.getStepExecution().getJobExecution().getExecutionContext().get("fournisseurs");
fabricantCSVList = (List<FabricantCSV>) stepContribution.getStepExecution().getJobExecution().getExecutionContext().get("fabricants");
if(fournisseurCSVList == null || !distributeurIteService.exist(fournisseurCSVList.get(0).getCodeFournisseur())){
chargementReporter.addError(Constants.TRAITEMENT_ARRETE_CAUSE_FOURNISSEUR_INEXISTANT_DANS_LE_REFERENTIEL + " : " + (fournisseurCSVList == null ? "" : fournisseurCSVList.get(0).getCodeFournisseur()));
throw new RuntimeException(Constants.TRAITEMENT_ARRETE_CAUSE_FOURNISSEUR_INEXISTANT_DANS_LE_REFERENTIEL);
}
if(fabricantCSVList == null || !fabricantIteService.exist(fabricantCSVList.get(0).getCodeFabricant()))
{
chargementReporter.addError(Constants.TRAITEMENT_ARRETE_CAUSE_FABRICANT_INEXISTANT_DANS_LE_REFERENTIEL + " : " + (fabricantCSVList == null ? "" : fabricantCSVList.get(0).getCodeFabricant()));
throw new RuntimeException(Constants.TRAITEMENT_ARRETE_CAUSE_FABRICANT_INEXISTANT_DANS_LE_REFERENTIEL);
}
return RepeatStatus.FINISHED;
}
}