package pl.edu.icm.saos.enrichment.apply.refregulations;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import pl.edu.icm.saos.enrichment.apply.EnrichmentTagValueConverter;
import pl.edu.icm.saos.persistence.model.JudgmentReferencedRegulation;
import pl.edu.icm.saos.persistence.model.LawJournalEntry;
import pl.edu.icm.saos.persistence.repository.LawJournalEntryRepository;
/**
* @author madryk
*/
@Service
public class ReferencedRegulationsTagValueConverter implements EnrichmentTagValueConverter<ReferencedRegulationsTagValueItem[], List<JudgmentReferencedRegulation>> {
private Logger log = LoggerFactory.getLogger(getClass());
private LawJournalEntryRepository lawJournalEntryRepository;
//------------------------ LOGIC --------------------------
@Override
public List<JudgmentReferencedRegulation> convert(ReferencedRegulationsTagValueItem[] refrencedRegulationsTagValueItems) {
Preconditions.checkNotNull(refrencedRegulationsTagValueItems);
List<JudgmentReferencedRegulation> referencedRegulations = Lists.newArrayList();
for (ReferencedRegulationsTagValueItem referencedRegulationsTagValueItem : refrencedRegulationsTagValueItems) {
referencedRegulations.add(convert(referencedRegulationsTagValueItem));
}
return referencedRegulations;
}
//------------------------ PRIVATE --------------------------
private JudgmentReferencedRegulation convert(ReferencedRegulationsTagValueItem referencedRegulationsTagValueItem) {
JudgmentReferencedRegulation referencedRegulation = new JudgmentReferencedRegulation();
LawJournalEntry lawJournalEntry = lawJournalEntryRepository.findOneByYearAndEntry(referencedRegulationsTagValueItem.getJournalYear(), referencedRegulationsTagValueItem.getJournalEntry());
if (lawJournalEntry == null) {
log.warn("LawJournalEntry defined in enrichment tag not found in database (year={}, entry={})",
referencedRegulationsTagValueItem.getJournalYear(), referencedRegulationsTagValueItem.getJournalEntry());
lawJournalEntry = new LawJournalEntry();
lawJournalEntry.setTitle(referencedRegulationsTagValueItem.getJournalTitle());
lawJournalEntry.setJournalNo(referencedRegulationsTagValueItem.getJournalNo());
lawJournalEntry.setYear(referencedRegulationsTagValueItem.getJournalYear());
lawJournalEntry.setEntry(referencedRegulationsTagValueItem.getJournalEntry());
}
referencedRegulation.setLawJournalEntry(lawJournalEntry);
referencedRegulation.setRawText(referencedRegulationsTagValueItem.getText());
referencedRegulation.markGenerated();
return referencedRegulation;
}
//------------------------ SETTERS --------------------------
@Autowired
public void setLawJournalEntryRepository(
LawJournalEntryRepository lawJournalEntryRepository) {
this.lawJournalEntryRepository = lawJournalEntryRepository;
}
}