package pl.edu.icm.saos.importer.common;
import java.util.List;
import java.util.stream.Collectors;
import javax.persistence.EntityManager;
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import pl.edu.icm.saos.importer.common.correction.ImportCorrectionConverter;
import pl.edu.icm.saos.persistence.correction.JudgmentCorrectionRepository;
import pl.edu.icm.saos.persistence.correction.model.JudgmentCorrection;
import pl.edu.icm.saos.persistence.model.Judgment;
import pl.edu.icm.saos.persistence.repository.JudgmentRepository;
/**
*
* Common writer for all import processes
*
* @author Ćukasz Dumiszewski
*/
public class JudgmentImportProcessWriter<T extends Judgment> implements ItemWriter<JudgmentWithCorrectionList<T>> {
private JudgmentRepository judgmentRepository;
private ImportCorrectionConverter importCorrectionConverter;
private JudgmentCorrectionRepository judgmentCorrectionRepository;
private EntityManager entityManager;
//------------------------ LOGIC --------------------------
@Override
public void write(List<? extends JudgmentWithCorrectionList<T>> judgmentsWithCorrectionList) {
List<Judgment> judgments = judgmentsWithCorrectionList.stream().map(j->j.getJudgment()).collect(Collectors.toList());
judgmentRepository.save(judgments);
judgmentRepository.flush();
judgmentCorrectionRepository.deleteByJudgmentIds(judgments.stream().map(j->j.getId()).collect(Collectors.toList()));
judgmentCorrectionRepository.flush();
for (JudgmentWithCorrectionList<T> jwc : judgmentsWithCorrectionList) {
List<JudgmentCorrection> judgmentCorrections = importCorrectionConverter.convertToJudgmentCorrections(jwc.getJudgment(), jwc.getCorrectionList().getImportCorrections());
judgmentCorrectionRepository.save(judgmentCorrections);
}
judgmentCorrectionRepository.flush();
entityManager.clear();
}
//------------------------ SETTERS --------------------------
@Autowired
public void setJudgmentRepository(JudgmentRepository judgmentRepository) {
this.judgmentRepository = judgmentRepository;
}
@Autowired
public void setImportCorrectionConverter(ImportCorrectionConverter importCorrectionConverter) {
this.importCorrectionConverter = importCorrectionConverter;
}
@Autowired
public void setJudgmentCorrectionRepository(JudgmentCorrectionRepository judgmentCorrectionRepository) {
this.judgmentCorrectionRepository = judgmentCorrectionRepository;
}
@Autowired
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
}