package ch.alv.components.web.i18n;
import ch.alv.components.core.enums.Language;
import ch.alv.components.core.spring.ApplicationContextProvider;
import ch.alv.components.core.utils.StringHelper;
import ch.alv.components.data.model.TextConstant;
import ch.alv.components.web.context.ServletRequestProvider;
import ch.alv.components.web.dto.TranslatedText;
import org.dozer.BeanFactory;
import java.util.List;
import java.util.Map;
/**
* Converts {@link TextConstant} into {@link ch.alv.components.web.dto.TranslatedText}.
*
* @since 1.0.0
*/
public class RequestAwareTranslatedTextFactory implements BeanFactory {
private static final Language LANGUAGE_DEFAULT = Language.GERMAN;
private final ApplicationContextProvider contextProvider;
public RequestAwareTranslatedTextFactory(ApplicationContextProvider contextProvider) {
this.contextProvider = contextProvider;
}
@Override
public Object createBean(Object o, Class<?> aClass, String s) {
String defaultValue = "";
if (o instanceof List) {
ServletRequestProvider requestProvider = getRequestProvider();
Language language = null;
if (requestProvider != null && StringHelper.isNotEmpty(requestProvider.getLanguage())) {
language = Language.getByCode(requestProvider.getLanguage());
}
if (language == null) {
language = LANGUAGE_DEFAULT;
}
List<?> items = (List<?>) o;
for (Object item : items) {
if (item instanceof TextConstant) {
TextConstant constant = (TextConstant) item;
if (constant.getLanguage() == language) {
return new TranslatedText(constant.getText());
}
if (constant.getLanguage() == LANGUAGE_DEFAULT) {
defaultValue = constant.getText();
}
}
}
}
return new TranslatedText(defaultValue);
}
private ServletRequestProvider getRequestProvider() {
Map<String, ServletRequestProvider> providers = contextProvider.getBeansOfType(ServletRequestProvider.class);
if (providers.isEmpty()) {
return null;
}
return providers.get(providers.keySet().iterator().next());
}
}