You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/05/09 17:39:34 UTC

[isis] 03/04: ISIS-2112: fixes poReader provisioning

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch 2112_SpringBoot
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 9304c68515db70542f5140278ea3913b8314f3a7
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 9 19:34:31 2019 +0200

    ISIS-2112: fixes poReader provisioning
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2112
---
 .../core/runtime/services/i18n/po/PoReader.java    | 33 +++++++++++++--------
 .../services/i18n/po/TranslationServicePo.java     | 34 ++++++++++------------
 .../services/TranslationsResolverWicket.java       | 11 +++----
 3 files changed, 40 insertions(+), 38 deletions(-)

diff --git a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
index 9822194..da55735 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
@@ -23,9 +23,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.stream.Collectors;
 
 import org.apache.isis.applib.services.i18n.LocaleProvider;
 import org.apache.isis.applib.services.i18n.TranslationService;
@@ -34,12 +32,15 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.core.commons.collections.Bin;
+
+import lombok.extern.slf4j.Slf4j;
 
+@Slf4j
 class PoReader extends PoAbstract {
 
     public static final String DASH = "-";
     public static final String UNDERSCORE = "_";
-    public static Logger LOG = LoggerFactory.getLogger(PoReader.class);
 
     private final Map<Locale, Map<ContextAndMsgId, String>> translationByKeyByLocale = _Maps.newHashMap();
     private final Map<Locale, Boolean> usesFallbackByLocale = _Maps.newHashMap();
@@ -59,18 +60,21 @@ class PoReader extends PoAbstract {
      * </p>
      */
     private final String basename = "translations";
-    private final TranslationsResolver translationsResolver;
-    private final LocaleProvider localeProvider;
+    private final Bin<TranslationsResolver> translationsResolver;
+    private final Bin<LocaleProvider> localeProvider;
 
     private List<String> fallback;
 
     public PoReader(final TranslationServicePo translationServicePo) {
         super(translationServicePo, TranslationService.Mode.READ);
         translationsResolver = translationServicePo.getTranslationsResolver();
-        if(translationsResolver == null) {
-            LOG.warn("No translationsResolver available");
+        if(translationsResolver.isEmpty()) {
+            log.warn("No TranslationsResolver available");
         }
         localeProvider = translationServicePo.getLocaleProvider();
+        if(localeProvider.isEmpty()) {
+            log.warn("No LocaleProvider available");
+        }
     }
 
     // -- init, shutdown
@@ -81,7 +85,7 @@ class PoReader extends PoAbstract {
     void init() {
         fallback = readUrl(basename + ".po");
         if(fallback == null) {
-            LOG.info("No fallback translations found; i18n is in effect disabled for this application");
+            log.info("No fallback translations found; i18n is in effect disabled for this application");
             fallback = Collections.emptyList();
         }
     }
@@ -127,7 +131,9 @@ class PoReader extends PoAbstract {
 
         final Locale targetLocale;
         try {
-            targetLocale = localeProvider.getLocale();
+            targetLocale = localeProvider.getFirst()
+                    .map(LocaleProvider::getLocale)
+                    .orElse(null);
             if(targetLocale == null) {
                 // eg if request from RO viewer and the (default) LocaleProviderWicket is being used.
                 return msgId;
@@ -241,14 +247,17 @@ class PoReader extends PoAbstract {
     }
 
     private List<String> readUrl(final String candidate) {
-        return translationsResolver.readLines(candidate);
+        return translationsResolver.stream()
+        .map(resolver->resolver.readLines(candidate))
+        .flatMap(List::stream)
+        .collect(Collectors.toList());
     }
 
 
     // to avoid flooding the logs
     private void logInfoIfNotPreviously(final String infoMessage) {
         if(!loggedInfoMessages.contains(infoMessage)) {
-            LOG.info(infoMessage);
+            log.info(infoMessage);
             loggedInfoMessages.add(infoMessage);
         }
     }
diff --git a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
index 52919a1..0e2cc19 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
@@ -20,28 +20,22 @@ package org.apache.isis.core.runtime.services.i18n.po;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
+import javax.inject.Singleton;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.i18n.LocaleProvider;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.i18n.TranslationsResolver;
+import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.core.commons.collections.Bin;
+import org.apache.isis.core.runtime.system.context.IsisContext;
 
 import static org.apache.isis.config.internal._Config.getConfiguration;
 
-@DomainService(
-        nature = NatureOfService.DOMAIN,
-        menuOrder = "" + Integer.MAX_VALUE
-        )
+@Singleton
 public class TranslationServicePo implements TranslationService {
 
-    public static Logger LOG = LoggerFactory.getLogger(TranslationServicePo.class);
-
     public static final String KEY_PO_MODE = "isis.services.translation.po.mode";
 
     private PoAbstract po;
@@ -172,20 +166,22 @@ public class TranslationServicePo implements TranslationService {
 
     // //////////////////////////////////////
 
-    @javax.inject.Inject
-    private TranslationsResolver translationsResolver;
+    
+    private _Lazy<Bin<TranslationsResolver>> translationsResolvers = _Lazy.threadSafe(()->
+        IsisContext.getServiceRegistry().select(TranslationsResolver.class) );
 
     @Programmatic
-    TranslationsResolver getTranslationsResolver() {
-        return translationsResolver;
+    Bin<TranslationsResolver> getTranslationsResolver() {
+        return translationsResolvers.get();
     }
 
-    @javax.inject.Inject
-    private LocaleProvider localeProvider;
+    private _Lazy<Bin<LocaleProvider>> localeProviders = _Lazy.threadSafe(()->
+        IsisContext.getServiceRegistry().select(LocaleProvider.class) );
 
     @Programmatic
-    LocaleProvider getLocaleProvider() {
-        return localeProvider;
+    Bin<LocaleProvider> getLocaleProvider() {
+        return localeProviders.get();
     }
 
+
 }
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
index f064097..40d933a 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
@@ -37,24 +37,21 @@ import com.google.common.io.CharSource;
 import com.google.common.io.Files;
 import com.google.common.io.Resources;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.i18n.TranslationsResolver;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.config.WebAppConstants;
 import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
 
+import lombok.extern.slf4j.Slf4j;
+
 
 /**
  * An implementation that reads from /WEB-INF/...
  */
-@Singleton
+@Singleton @Slf4j
 public class TranslationsResolverWicket implements TranslationsResolver {
 
-    public static Logger LOG = LoggerFactory.getLogger(TranslationsResolverWicket.class);
-
     @Override
     @Programmatic
     public List<String> readLines(final String file) {
@@ -63,7 +60,7 @@ public class TranslationsResolverWicket implements TranslationsResolver {
         final String configLocation = servletContext.getInitParameter(WebAppConstants.CONFIG_DIR_PARAM);
         try {
             if(configLocation != null) {
-                LOG.info( "Reading translations relative to config override location: {}", configLocation );
+                log.info( "Reading translations relative to config override location: {}", configLocation );
                 return Files.readLines(newFile(configLocation, file), Charsets.UTF_8);
             } else {
                 final URL url = servletContext.getResource("/WEB-INF/" + file);