DeleteGlassesIntegratedTreatmentJdbcBatchItemWriter.java

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

import com.sintia.ffl.admin.optique.catalogue.batch.reporter.PurgeVerreReporter;
import com.sintia.ffl.admin.optique.services.dto.Glasses;
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

@Component
public class DeleteGlassesIntegratedTreatmentJdbcBatchItemWriter implements ItemWriter<Glasses> {

	private final JdbcTemplate template;

	private final PurgeVerreReporter purgeVerreReporter;

	@Autowired
	public DeleteGlassesIntegratedTreatmentJdbcBatchItemWriter(
			DataSource dataSource,
			PurgeVerreReporter purgeVerreReporter
	) {
		this.template = new JdbcTemplate(dataSource);
		this.purgeVerreReporter = purgeVerreReporter;
	}

	@Override
	public void write(@NonNull final List<? extends Glasses> items)
		throws Exception {
		int[] results = this.template.batchUpdate(
			"delete from verre_trait_integres_asso where c_modele=?",
			new BatchPreparedStatementSetter() {

				@Override
				public void setValues(@NonNull PreparedStatement ps, int i)
					throws SQLException {
					Glasses item = items.get(i);
					ps.setString(1, item.getGlassCode());
				}

				@Override
				public int getBatchSize() {
					return items.size();
				}
			});
		int result = 0;
		for (int i : results) {
			result += i;
		}
		purgeVerreReporter.addGlassesIntegratedTreatmentPurged(result);

	}
}