package com.salesmanager.core.business.services.reference.country; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.business.repositories.reference.country.CountryRepository; import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl; import com.salesmanager.core.business.utils.CacheUtils; import com.salesmanager.core.model.reference.country.Country; import com.salesmanager.core.model.reference.country.CountryDescription; import com.salesmanager.core.model.reference.language.Language; @Service("countryService") public class CountryServiceImpl extends SalesManagerEntityServiceImpl<Integer, Country> implements CountryService { private static final Logger LOGGER = LoggerFactory.getLogger(CountryServiceImpl.class); private CountryRepository countryRepository; @Inject private CacheUtils cache; @Inject public CountryServiceImpl(CountryRepository countryRepository) { super(countryRepository); this.countryRepository = countryRepository; } public Country getByCode(String code) throws ServiceException { return countryRepository.findByIsoCode(code); } @Override public void addCountryDescription(Country country, CountryDescription description) throws ServiceException { country.getDescriptions().add(description); description.setCountry(country); update(country); } @Override public Map<String,Country> getCountriesMap(Language language) throws ServiceException { List<Country> countries = this.getCountries(language); Map<String,Country> returnMap = new LinkedHashMap<String,Country>(); for(Country country : countries) { returnMap.put(country.getIsoCode(), country); } return returnMap; } @Override public List<Country> getCountries(final List<String> isoCodes, final Language language) throws ServiceException { List<Country> countryList = getCountries(language); List<Country> requestedCountryList = new ArrayList<Country>(); if(!CollectionUtils.isEmpty(countryList)) { for(Country c : countryList) { if(isoCodes.contains(c.getIsoCode())) { requestedCountryList.add(c); } } } return requestedCountryList; } @SuppressWarnings("unchecked") @Override public List<Country> getCountries(Language language) throws ServiceException { List<Country> countries = null; try { countries = (List<Country>) cache.getFromCache("COUNTRIES_" + language.getCode()); if(countries==null) { countries = countryRepository.listByLanguage(language.getId()); //set names for(Country country : countries) { CountryDescription description = country.getDescriptions().get(0); country.setName(description.getName()); } cache.putInCache(countries, "COUNTRIES_" + language.getCode()); } } catch (Exception e) { LOGGER.error("getCountries()", e); } return countries; } }