PeremptionVerreItemWriter.java

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

import com.sintia.ffl.admin.optique.catalogue.batch.reporter.PeremptionVerreReporter;
import com.sintia.ffl.admin.optique.services.dto.Glasses;
import com.sintia.ffl.admin.optique.services.services.ModeleVerreService;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;

/**
 * Expire glasses by saving them in the database with a bSaisie value to '0'
 *
 * @author hlouanzi
 */
@Component
@StepScope
public class PeremptionVerreItemWriter implements ItemWriter<Glasses> {

	@Autowired
	private ModeleVerreService modeleVerreService;

	@Autowired
	private PeremptionVerreReporter peremptionVerreReporter;

	private final Date scriptDate;

	public PeremptionVerreItemWriter(@Value("#{jobParameters[scriptDate]}") Date scriptDate) {
		this.scriptDate = scriptDate;
	}

	@Override
	public void write(List<? extends Glasses> items)
			throws Exception {

        LocalDateTime date = LocalDateTime.ofInstant(this.scriptDate.toInstant(), ZoneId.systemDefault());
        for (Glasses model : items) {
            if (model.isToExpire()) {
                // update the Verre that is expiring
                modeleVerreService.persistGlass(model, date);
                // increment the number of glasses expired
                peremptionVerreReporter.incNumberModeleVerreExpired();
            }
        }
    }

}