package org.apereo.cas.audit.spi; import org.apache.commons.lang3.StringUtils; import org.apereo.inspektr.audit.spi.support.ReturnValueAsStringResourceResolver; import org.aspectj.lang.JoinPoint; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.i18n.LocaleContextHolder; import java.util.Locale; import java.util.stream.Collectors; import java.util.stream.Stream; /** * This is {@link MessageBundleAwareResourceResolver}. * * @author Misagh Moayyed * @since 5.0.0 */ public class MessageBundleAwareResourceResolver extends ReturnValueAsStringResourceResolver { @Autowired private ApplicationContext context; @Override public String[] resolveFrom(final JoinPoint joinPoint, final Exception e) { final String[] resolved = super.resolveFrom(joinPoint, e); return resolveMessagesFromBundleOrDefault(resolved, e); } private String[] resolveMessagesFromBundleOrDefault(final String[] resolved, final Exception e) { final Locale locale = LocaleContextHolder.getLocale(); final String defaultKey = Stream.of(StringUtils.splitByCharacterTypeCamelCase(e.getClass().getSimpleName())) .collect(Collectors.joining("_")) .toUpperCase(); return Stream.of(resolved) .map(key -> this.context.getMessage(key, null, defaultKey, locale)) .toArray(String[]::new); } }