Return-Path: X-Original-To: apmail-deltaspike-commits-archive@www.apache.org Delivered-To: apmail-deltaspike-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 80C6419A97 for ; Mon, 18 Apr 2016 06:56:23 +0000 (UTC) Received: (qmail 74943 invoked by uid 500); 18 Apr 2016 06:56:23 -0000 Delivered-To: apmail-deltaspike-commits-archive@deltaspike.apache.org Received: (qmail 74909 invoked by uid 500); 18 Apr 2016 06:56:23 -0000 Mailing-List: contact commits-help@deltaspike.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@deltaspike.apache.org Delivered-To: mailing list commits@deltaspike.apache.org Received: (qmail 74900 invoked by uid 99); 18 Apr 2016 06:56:23 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Apr 2016 06:56:23 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id CEC3DDFB95; Mon, 18 Apr 2016 06:56:22 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: struberg@apache.org To: commits@deltaspike.apache.org Message-Id: <70c26f0dd5fb436bae8fd47e1c16d43b@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: deltaspike git commit: DELTASPIKE-1126 ConfigResolver variable evaluation now on by default Date: Mon, 18 Apr 2016 06:56:22 +0000 (UTC) Repository: deltaspike Updated Branches: refs/heads/master 9c8c62d2c -> 4b09512b8 DELTASPIKE-1126 ConfigResolver variable evaluation now on by default Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/4b09512b Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/4b09512b Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/4b09512b Branch: refs/heads/master Commit: 4b09512b83850f078390e170921d6f4be826fbf2 Parents: 9c8c62d Author: Mark Struberg Authored: Mon Apr 18 08:26:21 2016 +0200 Committer: Mark Struberg Committed: Mon Apr 18 08:53:40 2016 +0200 ---------------------------------------------------------------------- .../core/api/config/ConfigResolver.java | 72 ++++++++++++-------- .../test/api/config/ConfigResolverTest.java | 21 ++++-- .../src/main/asciidoc/configuration.adoc | 16 +++++ 3 files changed, 77 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4b09512b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/ConfigResolver.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/ConfigResolver.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/ConfigResolver.java index f2ad42c..7ef2c52 100644 --- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/ConfigResolver.java +++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/ConfigResolver.java @@ -168,38 +168,14 @@ public final class ConfigResolver */ public static String getPropertyValue(String key, String defaultValue) { - String value = getPropertyValue(key); - - return fallbackToDefaultIfEmpty(key, value, defaultValue); + return getPropertyValue(key, defaultValue, true); } public static String getPropertyValue(String key, String defaultValue, boolean evaluateVariables) { - String value = getPropertyValue(key, defaultValue); - if (value != null && evaluateVariables) - { - int startVar = 0; - while ((startVar = value.indexOf("${", startVar)) >= 0) - { - int endVar = value.indexOf("}", startVar); - if (endVar <= 0) - { - break; - } - String variable = value.substring(startVar + 2, endVar); - if (variable.isEmpty()) - { - break; - } - String variableValue = getPropertyValue(variable, null, true); - if (variableValue != null) - { - value = value.replace("${" + variable + "}", variableValue); - } - startVar++; - } - } - return value; + String value = getPropertyValue(key, evaluateVariables); + + return fallbackToDefaultIfEmpty(key, value, defaultValue); } /** @@ -212,6 +188,20 @@ public final class ConfigResolver */ public static String getPropertyValue(String key) { + return getPropertyValue(key, true); + } + + /** + * Resolves the value configured for the given key. + * + * @param key the property key + * @param evaluateVariables whether to evaluate any '${variablename}' variable expressions + * + * @return the configured property value from the {@link ConfigSource} with the highest ordinal or null if there is + * no configured value for it + */ + public static String getPropertyValue(String key, boolean evaluateVariables) + { ConfigSource[] appConfigSources = getConfigSources(); String value; @@ -223,6 +213,32 @@ public final class ConfigResolver { LOG.log(Level.FINE, "found value {0} for key {1} in ConfigSource {2}.", new Object[]{filterConfigValueForLog(key, value), key, configSource.getConfigName()}); + + if (evaluateVariables) + { + // recursively resolve any ${varName} in the value + int startVar = 0; + while ((startVar = value.indexOf("${", startVar)) >= 0) + { + int endVar = value.indexOf("}", startVar); + if (endVar <= 0) + { + break; + } + String varName = value.substring(startVar + 2, endVar); + if (varName.isEmpty()) + { + break; + } + String variableValue = getPropertyValue(varName, true); + if (variableValue != null) + { + value = value.replace("${" + varName + "}", variableValue); + } + startVar++; + } + } + return filterConfigValue(key, value); } http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4b09512b/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/config/ConfigResolverTest.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/config/ConfigResolverTest.java b/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/config/ConfigResolverTest.java index 50f996a..b2745f7 100644 --- a/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/config/ConfigResolverTest.java +++ b/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/config/ConfigResolverTest.java @@ -138,15 +138,28 @@ public class ConfigResolverTest @Test public void testConfigVariableReplacement() { - String url = ConfigResolver.getPropertyValue("deltaspike.test.someapp.soap.endpoint", "", true); - Assert.assertEquals("http://localhost:12345/someservice/myendpoint", url); + { + String url = ConfigResolver.getPropertyValue("deltaspike.test.someapp.soap.endpoint", "", true); + Assert.assertEquals("http://localhost:12345/someservice/myendpoint", url); + } + + { + String url = ConfigResolver.getPropertyValue("deltaspike.test.someapp.soap.endpoint", true); + Assert.assertEquals("http://localhost:12345/someservice/myendpoint", url); + } } @Test public void testConfigVariableNotExisting() { - String url = ConfigResolver.getPropertyValue("deltaspike.test.nonexisting.variable", "", true); - Assert.assertEquals("${does.not.exist}/someservice/myendpoint", url); + { + String url = ConfigResolver.getPropertyValue("deltaspike.test.nonexisting.variable", "", true); + Assert.assertEquals("${does.not.exist}/someservice/myendpoint", url); + } + { + String url = ConfigResolver.getPropertyValue("deltaspike.test.nonexisting.variable", true); + Assert.assertEquals("${does.not.exist}/someservice/myendpoint", url); + } } @Test http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4b09512b/documentation/src/main/asciidoc/configuration.adoc ---------------------------------------------------------------------- diff --git a/documentation/src/main/asciidoc/configuration.adoc b/documentation/src/main/asciidoc/configuration.adoc index 4b7f345..d59b85d 100644 --- a/documentation/src/main/asciidoc/configuration.adoc +++ b/documentation/src/main/asciidoc/configuration.adoc @@ -142,6 +142,22 @@ This makes the overall calculation a bit slower, but allows for values to change dynamically if someone likes to for example implement a `JmxConfigSource` (not yet part of DeltaSpike, but easily implementable). +=== Variable Replacement in Configured Values + +Since version 1.6.1, DeltaSpike also supports using 'variables' inside configured values. +You can e.g. define a single configuration key for your server and use it in other configuration values +----------------------------------------------------------------- +document.server.url=http://localhost:8081 +myapp.document.lists=${document.server.url}/docapp/list +myapp.document.admin=${document.server.url}/docadmin/app +----------------------------------------------------------------- + +A variable name starts with `${` and ends with `}`. + +Variable support is enabled by default. +If you like to use the `ConfigResolver` without variable support you need to use the methods with the `evaluateVariables` parameter set to `false`. + + === TypedResolver API Very often the configured values represent more than just strings -- number types and booleans are commonly used as