package pl.edu.icm.saos.webapp.court;
import static pl.edu.icm.saos.webapp.common.CacheNames.DICTIONARIES;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import pl.edu.icm.saos.persistence.model.SupremeCourtChamber;
import pl.edu.icm.saos.persistence.model.SupremeCourtChamberDivision;
import pl.edu.icm.saos.persistence.repository.ScChamberDivisionRepository;
import pl.edu.icm.saos.persistence.repository.ScChamberRepository;
import pl.edu.icm.saos.persistence.repository.ScJudgmentFormRepository;
import pl.edu.icm.saos.webapp.common.WebappConst;
/**
* Service that provides methods for finding lists of supreme courts,
* supreme court division chambers and supreme court judgment forms.
*
* @author Łukasz Pawełczak
*
*/
@Service
public class ScListService {
private ScChamberRepository scChamberRepository;
private ScChamberDivisionRepository scChamberDivisionRepository;
private ScJudgmentFormRepository scJudgmentFormRepository;
private SimpleEntityConverter simpleEntityConverter;
//------------------------ LOGIC --------------------------
/**
* Finds all supreme court chambers. Returned list is sorted by {@link ScChamberComparator}.
*
* @return list of {@link pl.edu.icm.saos.webapp.court.SimpleEntity}
*/
@Cacheable(DICTIONARIES)
public List<SimpleEntity> findScChambers() {
List<SupremeCourtChamber> chambers = scChamberRepository.findAll();
Collections.sort(chambers, new ScChamberComparator());
return simpleEntityConverter.convertScChambers(chambers);
}
/**
* Finds all supreme court chamber divisions by supreme court chamber id.
* Returned list is sorted by {@link ScChamberDivisionComparator}.
*
* @param chamberId - chamber division id
* @return list of {@link pl.edu.icm.saos.webapp.court.SimpleEntity}
*/
@Cacheable(DICTIONARIES)
public List<SimpleEntity> findScChamberDivisions(long chamberId) {
List<SupremeCourtChamberDivision> chamberDivisions = scChamberDivisionRepository.findAllByScChamberId(chamberId);
Collections.sort(chamberDivisions, new ScChamberDivisionComparator());
return simpleEntityConverter.convertScChamberDivisions(chamberDivisions);
}
/**
* Finds all supreme court judgment forms.
*
* @return list of {@link pl.edu.icm.saos.webapp.court.SimpleEntity}
*/
@Cacheable(DICTIONARIES)
public List<SimpleEntity> findScJudgmentForms() {
return simpleEntityConverter.convertScJudgmentForms(scJudgmentFormRepository.findAll());
}
//------------------------ PRIVATE --------------------------
private class ScChamberComparator implements Comparator<SupremeCourtChamber> {
public int compare(SupremeCourtChamber chamberOne, SupremeCourtChamber chamberTwo) {
return Collator.getInstance(WebappConst.LOCALE_PL).compare(chamberOne.getName(), chamberTwo.getName());
}
}
//------------------------ SETTERS --------------------------
@Autowired
public void setScChamberRepository(ScChamberRepository scChamberRepository) {
this.scChamberRepository = scChamberRepository;
}
@Autowired
public void setScChamberDivisionRepository(ScChamberDivisionRepository scChamberDivisionRepository) {
this.scChamberDivisionRepository = scChamberDivisionRepository;
}
@Autowired
public void setScJudgmentFormRepository(ScJudgmentFormRepository scJudgmentFormRepository) {
this.scJudgmentFormRepository = scJudgmentFormRepository;
}
@Autowired
public void setSimpleEntityConverter(SimpleEntityConverter simpleEntityConverter) {
this.simpleEntityConverter = simpleEntityConverter;
}
}