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 2018/10/16 23:22:26 UTC

[isis] branch v2 updated: ISIS-1895: allow 'WebServer' to prime config properties

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

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


The following commit(s) were added to refs/heads/v2 by this push:
     new fc0e1a6  ISIS-1895: allow 'WebServer' to prime config properties
fc0e1a6 is described below

commit fc0e1a6fe7cd1671a34e439d7c02c87a2dfdf6e4
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 17 01:21:30 2018 +0200

    ISIS-1895: allow 'WebServer' to prime config properties
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1895
---
 .../isis/core/webapp/IsisWebAppConfigProvider.java | 32 ++++++++++++++++------
 .../core/webapp/IsisWebAppContextListener.java     |  3 +-
 .../org/apache/isis/core/webserver/WebServer.java  |  4 +++
 3 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
index 2bb2bca..f2b19d1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
@@ -20,14 +20,17 @@ package org.apache.isis.core.webapp;
 
 import static org.apache.isis.commons.internal.base._With.ifPresentElse;
 import static org.apache.isis.commons.internal.base._With.requires;
+import static org.apache.isis.commons.internal.context._Context.computeIfAbsent;
 import static org.apache.isis.commons.internal.context._Context.getOrThrow;
-import static org.apache.isis.commons.internal.context._Context.putSingleton;
+
+import java.util.Map;
 
 import javax.servlet.ServletContext;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
 import org.apache.isis.core.commons.resource.ResourceStreamSourceCurrentClassClassPath;
@@ -45,6 +48,11 @@ public class IsisWebAppConfigProvider {
     private static final Logger LOG = LoggerFactory.getLogger(IsisWebAppConfigProvider.class);
     
     private IsisConfigurationBuilder cfgBuilder;
+    private final Map<String, String> additionalConfig = _Maps.newHashMap();
+    
+    private IsisWebAppConfigProvider() {
+        // private constructor
+    }
     
     /**
      * Removes any cached IsisConfigurationBuilder instance from this provider.
@@ -75,11 +83,18 @@ public class IsisWebAppConfigProvider {
     protected IsisConfigurationBuilder newIsisConfigurationBuilder(final ServletContext servletContext) {
         IsisConfigurationBuilder isisConfigurationBuilder = new IsisConfigurationBuilder();
         isisConfigurationBuilder.primeWith(new OptionHandlerInitParameters(servletContext));
+        additionalConfig.forEach((k, v)->isisConfigurationBuilder.put(k, v));
         addServletContextConstants(servletContext, isisConfigurationBuilder);
         addResourceStreamSources(servletContext, isisConfigurationBuilder);
         return isisConfigurationBuilder;
     }
     
+    // -- CONFIG OVERRIDING
+    
+    public void addConfig(Map<String, String> map) {
+        this.additionalConfig.putAll(map);
+    }
+    
     // -- PEEKING
     
     /**
@@ -101,14 +116,6 @@ public class IsisWebAppConfigProvider {
     // -- LOOKUP
     
     /**
-     * Register an instance of IsisWebAppConfigProvider as an application-scoped singleton.
-     * @param configProvider
-     */
-    public static void register(IsisWebAppConfigProvider configProvider) {
-        putSingleton(IsisWebAppConfigProvider.class, configProvider);
-    }
-    
-    /**
      * @return the application-scoped singleton instance of IsisWebAppConfigProvider
      * @throws IllegalStateException if no such singleton was registered
      */
@@ -117,6 +124,12 @@ public class IsisWebAppConfigProvider {
                 ()->new IllegalStateException("No config provider registered on this context."));
     }
     
+    public static IsisWebAppConfigProvider registerInstanceIfAbsent() {
+        final IsisWebAppConfigProvider configProvider =  
+                computeIfAbsent(IsisWebAppConfigProvider.class, __->new IsisWebAppConfigProvider());
+        return configProvider;
+    }
+    
     // -- HELPER
 
     private static void addServletContextConstants(
@@ -144,5 +157,6 @@ public class IsisWebAppConfigProvider {
             isisConfigurationBuilder.addResourceStreamSource(new ResourceStreamSourceForWebInf(servletContext));
         }
     }
+
     
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
index 2267032..3f27993 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
@@ -72,8 +72,7 @@ public class IsisWebAppContextListener implements ServletContextListener {
         
         putContextPathIfPresent(servletContext.getContextPath());
         
-        final IsisWebAppConfigProvider configProvider = new IsisWebAppConfigProvider();
-        IsisWebAppConfigProvider.register(configProvider);
+        final IsisWebAppConfigProvider configProvider = IsisWebAppConfigProvider.registerInstanceIfAbsent();
 
         final List<WebModule> webModules =
                  WebModule.discoverWebModules()
diff --git a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
index ad14852..d536f11 100644
--- a/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
+++ b/core/webserver/src/main/java/org/apache/isis/core/webserver/WebServer.java
@@ -58,6 +58,7 @@ import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixture;
 import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixtureFromEnvironmentVariable;
 import org.apache.isis.core.runtime.runner.opts.OptionHandlerHelp;
 import org.apache.isis.core.runtime.runner.opts.OptionHandlerSystemProperties;
+import org.apache.isis.core.webapp.IsisWebAppConfigProvider;
 import org.apache.isis.core.webserver.internal.OptionHandlerPort;
 import org.apache.isis.core.webserver.internal.OptionHandlerStartupMode;
 
@@ -164,6 +165,9 @@ public class WebServer {
         final WebAppContext context = new WebAppContext(SRC_MAIN_WEBAPP, webappContextPath);
         jettyServer.setHandler(context);
 
+        final IsisWebAppConfigProvider configProvider = IsisWebAppConfigProvider.registerInstanceIfAbsent();
+        configProvider.addConfig(configurationBuilder.peekConfiguration().asMap());
+
         return jettyServer;
     }