From 6aa4867bba0ede596967c40e70a6f1299783eebf Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 15 Nov 2023 08:52:32 -0600 Subject: [PATCH] Add getStringFromPropertyOrEnvironment --- .../QMetaDataVariableInterpreter.java | 26 +++++++++++++ .../QMetaDataVariableInterpreterTest.java | 37 +++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreter.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreter.java index 339dea31..f4df44a1 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreter.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreter.java @@ -270,6 +270,32 @@ public class QMetaDataVariableInterpreter + /******************************************************************************* + ** First look for a string in the specified system property - + ** Next look for a string in the specified env var name - + ** Finally return the default. + *******************************************************************************/ + public String getStringFromPropertyOrEnvironment(String systemPropertyName, String environmentVariableName, String defaultIfNotSet) + { + String propertyValue = System.getProperty(systemPropertyName); + if(StringUtils.hasContent(propertyValue)) + { + LOG.info("Read system property [" + systemPropertyName + "] as [" + propertyValue + "]."); + return (propertyValue); + } + + String envValue = interpret("${env." + environmentVariableName + "}"); + if(StringUtils.hasContent(envValue)) + { + LOG.info("Read env var [" + environmentVariableName + "] as [" + envValue + "]."); + return (envValue); + } + + return defaultIfNotSet; + } + + + /******************************************************************************* ** First look for a boolean ("true" or "false") in the specified system property - ** Next look for a boolean in the specified env var name - diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreterTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreterTest.java index 3e3ea57b..474fd084 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreterTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreterTest.java @@ -226,6 +226,43 @@ class QMetaDataVariableInterpreterTest extends BaseTest + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testGetStringFromPropertyOrEnvironment() + { + QMetaDataVariableInterpreter interpreter = new QMetaDataVariableInterpreter(); + + ////////////////////////////////////////////////////////// + // if neither prop nor env is set, get back the default // + ////////////////////////////////////////////////////////// + assertEquals("default", interpreter.getStringFromPropertyOrEnvironment("notSet", "NOT_SET", "default")); + + ///////////////////////////////// + // if only prop is set, get it // + ///////////////////////////////// + assertEquals("default", interpreter.getStringFromPropertyOrEnvironment("foo.value", "FOO_VALUE", "default")); + System.setProperty("foo.value", "fooPropertyValue"); + assertEquals("fooPropertyValue", interpreter.getStringFromPropertyOrEnvironment("foo.value", "FOO_VALUE", "default")); + + //////////////////////////////// + // if only env is set, get it // + //////////////////////////////// + assertEquals("default", interpreter.getStringFromPropertyOrEnvironment("bar.value", "BAR_VALUE", "default")); + interpreter.setEnvironmentOverrides(Map.of("BAR_VALUE", "barEnvValue")); + assertEquals("barEnvValue", interpreter.getStringFromPropertyOrEnvironment("bar.value", "BAR_VALUE", "default")); + + /////////////////////////////////// + // if both are set, get the prop // + /////////////////////////////////// + System.setProperty("baz.value", "bazPropertyValue"); + interpreter.setEnvironmentOverrides(Map.of("BAZ_VALUE", "bazEnvValue")); + assertEquals("bazPropertyValue", interpreter.getStringFromPropertyOrEnvironment("baz.value", "BAZ_VALUE", "default")); + } + + + /******************************************************************************* ** *******************************************************************************/