/** * Get message value using MessageProvider for given code. Parent localizations are used as fallback, if any. * @param locale Locale for which to obtain the message localization * @param provider MessageProvider * @param code Message code * @return Optional message value */ protected Optional<String> getMessageFromProvider(Locale locale, MessageProvider provider, String code) { Optional<String> value = provider.getMessage(locale, code); if (!value.isPresent()) { // check parent Optional<Localization> parent = getLocalization().getParent(); while (parent.isPresent()) { value = provider.getMessage(parent.get().getLocale(), code); if (value.isPresent()) { return value; } parent = parent.get().getParent(); } } return value; }