All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.anonymousmister.bootfastconfig.config.MessageSourceConfiguration Maven / Gradle / Ivy

package com.github.anonymousmister.bootfastconfig.config;


import com.github.anonymousmister.bootfastconfig.expand.MessageSource;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.AbstractMessageSource;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.Map;


/**
 * @author mister
 */
@Log4j2
public class MessageSourceConfiguration {

    @Bean
    @ConditionalOnBean(value = MessageSource.class)
    public org.springframework.context.MessageSource messageSource(MessageSource properties) {

        return new MyMessageSourceService(properties);
    }


    public class MyMessageSourceService extends AbstractMessageSource implements ResourceLoaderAware {


        private MessageSource messageSource;


        private ResourceLoader resourceLoader;

        public MyMessageSourceService(MessageSource messageSource) {
            this.messageSource = messageSource;
        }


        public String getSourceFromCache(String code, Locale locale) {
            Map props = messageSource.getMessageByLocale(code, locale);
            if (null != props && props.containsKey(code)) {
                return props.get(code);
            } else {
                try {
                    if (null != this.getParentMessageSource()) {
                        return this.getParentMessageSource().getMessage(code, null, locale);
                    }
                } catch (Exception ex) {
                    logger.error(ex.getMessage(), ex);
                }
                return code;
            }
        }

        @Override
        public void setResourceLoader(ResourceLoader resourceLoader) {
            this.resourceLoader = (resourceLoader == null ? new DefaultResourceLoader() : resourceLoader);
        }

        @Override
        protected String resolveCodeWithoutArguments(String code, Locale locale) {
            return getSourceFromCache(code, locale);
        }

        @Override
        protected MessageFormat resolveCode(String code, Locale locale) {
            String msg = getSourceFromCache(code, locale);
            MessageFormat messageFormat = new MessageFormat(msg, locale);
            return messageFormat;
        }
    }


}







© 2015 - 2025 Weber Informatics LLC | Privacy Policy