PeremptionVerresAbsentsItemReader.java

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

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.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 PeremptionVerresAbsentsItemReader extends JdbcCursorItemReader<Glasses> {

	@Autowired
	private TypeVerreRepository typeVerreRepository;

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

	@Autowired
	public PeremptionVerresAbsentsItemReader(DataSource dataSource) {
		this.setDataSource(dataSource);
		this.setSql(
			"select c_modele, l_modele, n_indice, b_saisie, d_maj_catalogue, d_creation, d_maj, c_opto_code_verre, d_demande_supp, d_debut_validite, id_classe, id_modele_verre, id_distributeur, id_fabricant, id_type_verre, id_type_materiau from modele_verre");
		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.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;
				}
			});
	}
}