DeleteGlassesExtraAssoJdbcBatchItemWriter.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.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 DeleteGlassesExtraAssoJdbcBatchItemWriter implements ItemWriter<Glasses> {

	private final JdbcTemplate template;

	private final PurgeVerreReporter purgeVerreReporter;

	public DeleteGlassesExtraAssoJdbcBatchItemWriter(
			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_supplement_asso where id_modele_verre=? ",
			new BatchPreparedStatementSetter() {

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

				@Override
				public int getBatchSize() {
					return items.size();
				}
			});

		int result = 0;
		for (int i : results) {
			result += i;
		}
		purgeVerreReporter.addGlassesExtrasAssoPurged(result);

	}

}