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.CommonCourt;
import pl.edu.icm.saos.persistence.model.CommonCourtDivision;
import pl.edu.icm.saos.persistence.repository.CcDivisionRepository;
import pl.edu.icm.saos.persistence.repository.CommonCourtRepository;
import pl.edu.icm.saos.webapp.common.WebappConst;
/**
* Service that finds and provides lists of common courts and common court divisions.
*
* @author Łukasz Pawełczak
*
*/
@Service
public class CcListService {
private CommonCourtRepository commonCourtRepository;
private CcDivisionRepository ccDivisionRepository;
private SimpleEntityConverter simpleEntityConverter;
private SimpleCommonCourtConverter simpleCommonCourtConverter;
//------------------------ LOGIC --------------------------
/**
* Finds and returns all common courts.
*
* @return list of {@link pl.edu.icm.saos.webapp.court.SimpleEntity}
*/
@Cacheable(DICTIONARIES)
public List<SimpleCommonCourt> findCommonCourts() {
List<CommonCourt> commonCourts = commonCourtRepository.findAll();
Collections.sort(commonCourts, new CommonCourtComparator());
return simpleCommonCourtConverter.convertCommonCourts(commonCourts);
}
/**
* Finds list of common court division by common court id.
* Returned list is sorted with {@link CcDivisionComparator}.
*
* @param courtId - common court id
* @return list of {@link pl.edu.icm.saos.webapp.court.SimpleEntity}
*/
@Cacheable(DICTIONARIES)
public List<SimpleEntity> findCcDivisions(long courtId) {
List<CommonCourtDivision> courtDivisions = ccDivisionRepository.findAllByCourtId(courtId);
Collections.sort(courtDivisions, new CcDivisionComparator());
return simpleEntityConverter.convertCcDivisions(courtDivisions);
}
//------------------------ PRIVATE --------------------------
private class CommonCourtComparator implements Comparator<CommonCourt> {
public int compare(CommonCourt courtOne, CommonCourt courtTwo) {
return Collator.getInstance(WebappConst.LOCALE_PL).compare(courtOne.getName(), courtTwo.getName());
}
}
//------------------------ SETTERS --------------------------
@Autowired
public void setCommonCourtRepository(CommonCourtRepository ccRepository) {
this.commonCourtRepository = ccRepository;
}
@Autowired
public void setCcDivisionRepository(CcDivisionRepository ccDivisionRepository) {
this.ccDivisionRepository = ccDivisionRepository;
}
@Autowired
public void setSimpleEntityConverter(SimpleEntityConverter simpleEntityConverter) {
this.simpleEntityConverter = simpleEntityConverter;
}
@Autowired
public void setSimpleCommonCourtConverter(SimpleCommonCourtConverter simpleCommonCourtConverter) {
this.simpleCommonCourtConverter = simpleCommonCourtConverter;
}
}