PeremptionVerreItemReader.java

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

import com.sintia.ffl.admin.optique.dal.repositories.catalogue.DistributeurCatalogueRepository;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.FabricantCatalogueRepository;
import com.sintia.ffl.admin.optique.dal.repositories.TypeMateriauRepository;
import com.sintia.ffl.admin.optique.dal.repositories.TypeVerreRepository;
import com.sintia.ffl.admin.optique.services.dto.Glasses;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.ResultSet;

/**
 * Read ModeleVerre entities from the database with a cursor JDBC
 *
 * @author
 */
@Component
@StepScope
public class PeremptionVerreItemReader extends JdbcCursorItemReader<Glasses> {

	private static final Logger LOGGER = LoggerFactory.getLogger(PeremptionVerreItemReader.class);

	@Autowired
	private TypeVerreRepository typeVerreRepository;

	@Autowired
	private TypeMateriauRepository typeMateriauRepository;
	
	@Autowired
	private FabricantCatalogueRepository fabricantRepository;
	
	@Autowired
	private DistributeurCatalogueRepository distributeurRepository;

	@Autowired
	public PeremptionVerreItemReader(DataSource dataSource) {
		this.setDataSource(dataSource);
		this.setSql(
				"select c.code, mv.c_modele, mv.l_modele, mv.n_indice, mv.b_saisie, mv.d_maj_catalogue, mv.d_creation, mv.d_debut_validite, mv.d_maj, mv.c_opto_code_verre, mv.d_demande_supp, mv.d_debut_validite, mv.id_classe, mv.id_modele_verre, mv.id_distributeur, mv.id_fabricant, mv.id_type_verre, mv.id_type_materiau from modele_verre mv left join classe c on c.id_classe = mv.id_classe where mv.b_saisie='1'");
		this.setRowMapper(
				(ResultSet resultSet, int rowNum) -> {
					if (!(resultSet.isAfterLast()) && !(resultSet.isBeforeFirst())) {
						Glasses glass = new Glasses();
						glass.setGlassCode(resultSet.getString("c_modele"));
						glass.setGlassName(resultSet.getString("l_modele"));
						glass.setRefractiveIndex(resultSet.getInt("n_indice"));
						glass.setSeizable(resultSet.getString("b_saisie"));
						glass.setGlassOptoCode(resultSet.getString("c_opto_code_verre"));
						glass.setMaterial(typeMateriauRepository.findById(resultSet.getInt("id_type_materiau")).get().getCTypeMateriau());
						glass.setGlassType(typeVerreRepository.findById(resultSet.getInt("id_type_verre")).get().getCTypeVerre());
						glass.setMaker(fabricantRepository.findById(resultSet.getInt("id_fabricant")).get().getCodeOptoCodeFabricant());
						glass.setProvider(distributeurRepository.findById(resultSet.getInt("id_distributeur")).get().getCOptoCodeDistributeur());
						glass.setCreationDate(resultSet.getTimestamp("d_creation").toLocalDateTime());
						glass.setUpdateDate(resultSet.getTimestamp("d_maj").toLocalDateTime());
						if (resultSet.getString("code") != null) {
							glass.setGlassClass(resultSet.getString("code"));
						} else {
							LOGGER.warn("The glass {} doesn't have a class", glass);
						}
						if (resultSet.getDate("d_demande_supp") != null) {
							glass.setExpiryDate(resultSet.getDate("d_demande_supp").toLocalDate());
						}
						if (resultSet.getTimestamp("d_maj_catalogue") != null) {
							glass.setCatalogUpdateDate(resultSet.getTimestamp("d_maj_catalogue").toLocalDateTime());
						}
						if (resultSet.getDate("d_debut_validite") != null) {
							glass.setStartDate(resultSet.getDate("d_debut_validite").toLocalDate());
						}
						return glass;
					} else {
						return null;
					}
				});
	}
}