summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/logging/SpringBasedBasicStatusMessager.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/logging/SpringBasedBasicStatusMessager.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/logging/SpringBasedBasicStatusMessager.java
new file mode 100644
index 00000000..a62b8c9b
--- /dev/null
+++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/logging/SpringBasedBasicStatusMessager.java
@@ -0,0 +1,115 @@
+package at.gv.egiz.eaaf.core.impl.logging;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+
+import org.springframework.context.MessageSource;
+import org.springframework.context.MessageSourceAware;
+import org.springframework.context.NoSuchMessageException;
+import org.springframework.context.i18n.LocaleContextHolder;
+
+import at.gv.egiz.eaaf.core.api.IStatusMessenger;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Basic {@link IStatusMessenger} implementation that operates on Spring {@link MessageSource}.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+public class SpringBasedBasicStatusMessager implements IStatusMessenger, MessageSourceAware {
+
+ private static final String ERROR_MESSAGES_UNAVAILABLE = "Error messages can NOT be load from application."
+ + " Only errorCode: {0} is availabe";
+ private static final String ERROR_NO_MESSAGE = "No errormesseage for error with number.={0}";
+
+ private static final String MSG_WARN_NO_SOURCE = "MessageCode: {} is NOT SET for locale: {}";
+ private static final String MSG_INFO = "Use locale: {} as default";
+
+ private MessageSource messageSource;
+
+ @Override
+ public String getMessage(String messageId, Object[] parameters) {
+ if (messageSource == null) {
+ return MessageFormat.format(ERROR_MESSAGES_UNAVAILABLE, new Object[]{messageId});
+
+ } else {
+ try {
+ final Locale locale = LocaleContextHolder.getLocale();
+ return messageSource.getMessage(messageId, parameters, locale);
+
+ } catch (final NoSuchMessageException e) {
+ log.info(MSG_WARN_NO_SOURCE, messageId, LocaleContextHolder.getLocale());
+ log.debug(MSG_INFO, Locale.ENGLISH);
+
+ try {
+ return messageSource.getMessage(messageId, parameters, Locale.ENGLISH);
+
+ } catch (final NoSuchMessageException e2) {
+ return MessageFormat.format(ERROR_NO_MESSAGE, new Object[]{messageId});
+
+ }
+
+ } catch (final MissingResourceException e2) {
+ return MessageFormat.format(ERROR_NO_MESSAGE, new Object[]{messageId});
+
+ }
+ }
+ }
+
+ @Override
+ public String getMessageWithoutDefault(String messageId, Object[] parameters) {
+ if (messageSource == null) {
+ return null;
+
+ } else {
+ try {
+ final Locale locale = LocaleContextHolder.getLocale();
+ return messageSource.getMessage(messageId, parameters, locale);
+
+ } catch (final NoSuchMessageException e) {
+ log.info(MSG_WARN_NO_SOURCE, messageId, LocaleContextHolder.getLocale());
+ log.debug(MSG_INFO, Locale.ENGLISH);
+
+ try {
+ return messageSource.getMessage(messageId, parameters, Locale.ENGLISH);
+
+ } catch (final NoSuchMessageException e2) {
+ log.info(MSG_WARN_NO_SOURCE, messageId, Locale.ENGLISH);
+
+ }
+
+ } catch (final MissingResourceException e2) {
+ log.warn("No message source", e2);
+
+ }
+ }
+
+ return null;
+
+ }
+
+ @Override
+ public String getResponseErrorCode(Throwable throwable) {
+ return IStatusMessenger.CODES_INTERNAL_ERROR_GENERIC;
+
+ }
+
+ @Override
+ public String mapInternalErrorToExternalError(String intErrorCode) {
+ return IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC;
+
+ }
+
+ @Override
+ public void setMessageSource(final MessageSource messageSource) {
+ this.messageSource = messageSource;
+
+ log.info("Injecting '{}' into 'LogMessageProviderFactory'", this.getClass().getName());
+ LogMessageProviderFactory.setStatusMessager(this);
+
+ }
+
+}