package com.salesmanager.core.business.services.reference.language; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.salesmanager.core.business.constants.Constants; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.business.repositories.reference.language.LanguageRepository; import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl; import com.salesmanager.core.business.utils.CacheUtils; import com.salesmanager.core.model.reference.language.Language; /** * https://samerabdelkafi.wordpress.com/2014/05/29/spring-data-jpa/ * @author c.samson * */ @Service("languageService") public class LanguageServiceImpl extends SalesManagerEntityServiceImpl<Integer, Language> implements LanguageService { private static final Logger LOGGER = LoggerFactory.getLogger(LanguageServiceImpl.class); @Inject private CacheUtils cache; private LanguageRepository languageRepository; @Inject public LanguageServiceImpl(LanguageRepository languageRepository) { super(languageRepository); this.languageRepository = languageRepository; } @Override public Language getByCode(String code) throws ServiceException { return languageRepository.findByCode(code); } @Override public Locale toLocale(Language language) { return new Locale(language.getCode()); } @Override public Language toLanguage(Locale locale) { try { Language lang = getLanguagesMap().get(locale.getLanguage()); return lang; } catch (Exception e) { LOGGER.error("Cannot convert locale " + locale.getLanguage() + " to language"); } return new Language(Constants.DEFAULT_LANGUAGE); } @Override public Map<String,Language> getLanguagesMap() throws ServiceException { List<Language> langs = this.getLanguages(); Map<String,Language> returnMap = new LinkedHashMap<String,Language>(); for(Language lang : langs) { returnMap.put(lang.getCode(), lang); } return returnMap; } @Override @SuppressWarnings("unchecked") public List<Language> getLanguages() throws ServiceException { List<Language> langs = null; try { langs = (List<Language>) cache.getFromCache("LANGUAGES"); if(langs==null) { langs = this.list(); cache.putInCache(langs, "LANGUAGES"); } } catch (Exception e) { LOGGER.error("getCountries()", e); throw new ServiceException(e); } return langs; } @Override public Language defaultLanguage() { return toLanguage(Locale.ENGLISH); } }