package org.businessmanager.web.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.faces.model.SelectItem;
import org.businessmanager.domain.settings.ApplicationSetting;
import org.businessmanager.service.settings.ApplicationSettingsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
@Component("languageController")
@Scope("session")
public class LanguageController extends AbstractController {
@Autowired
private ApplicationSettingsService settingsService;
private Locale localeForCurrentUser;
public List<SelectItem> getAvailableLanguages() {
Locale language = facesContext.getLocale();
List<Locale> languages = getLanguagesFromDb();
List<SelectItem> selectItemsList = new ArrayList<SelectItem>();
for (Locale locale : languages) {
selectItemsList.add(new SelectItem(locale.getLanguage(), locale
.getDisplayLanguage(language)));
}
return selectItemsList;
}
private List<Locale> getLanguagesFromDb() {
List<Locale> list = new ArrayList<Locale>();
// TODO: retrieve supported languages from database
list.add(Locale.GERMAN);
list.add(Locale.ENGLISH);
return list;
}
public void setLocale(Locale newLocale) {
localeForCurrentUser = newLocale;
facesContext.setLocale(newLocale);
}
public Locale getLocale() {
if (localeForCurrentUser == null) {
localeForCurrentUser = getLocaleForCurrentUser();
}
if (localeForCurrentUser != null) {
return localeForCurrentUser;
}
return facesContext.getLocale();
}
private Locale getLocaleForCurrentUser() {
String username = SecurityContextHolder.getContext()
.getAuthentication().getName();
if (username != null) {
String language = settingsService.getApplicationSettingValue(
ApplicationSetting.Group.USER_PREFERENCS,
ApplicationSettingsService.GENERAL_LANGUAGE, username);
if (language != null) {
return new Locale(language);
}
}
return null;
}
}