From 22f47cd382ca1b8546f38d9ceb730514198d951c Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Tue, 31 Aug 2021 14:24:19 +0200 Subject: [PATCH] IDEMPIERE-4939 Implement ability to discover operating system environment variables when parsing context (FHCA-3026) (#853) * IDEMPIERE-4939 Implement ability to discover operating system environment variables when parsing context (FHCA-3026) * IDEMPIERE-4939 Add unit test --- org.adempiere.base/src/org/compiere/util/Env.java | 10 +++++++++- .../org/idempiere/test/base/LogicExpressionTest.java | 11 ++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/util/Env.java b/org.adempiere.base/src/org/compiere/util/Env.java index 9ec8e3b053..7e6b2eec42 100644 --- a/org.adempiere.base/src/org/compiere/util/Env.java +++ b/org.adempiere.base/src/org/compiere/util/Env.java @@ -129,7 +129,9 @@ public final class Env public static final String SYSTEM_NAME = "#System_Name"; public static final String UI_CLIENT = "#UIClient"; public static final String USER_LEVEL = "#User_Level"; - + + private static final String PREFIX_SYSTEM_VARIABLE = "$env."; + private final static ContextProvider clientContextProvider = new DefaultContextProvider(); @@ -568,6 +570,12 @@ public final class Env { if (ctx == null || context == null) throw new IllegalArgumentException ("Require Context"); + if (context.startsWith(PREFIX_SYSTEM_VARIABLE)) { + String retValue = System.getenv(context.substring(PREFIX_SYSTEM_VARIABLE.length())); + if (retValue == null) + retValue = ""; + return retValue; + } return ctx.getProperty(context, ""); } // getContext diff --git a/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java b/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java index f168de0483..a7a6918167 100644 --- a/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java +++ b/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java @@ -564,7 +564,16 @@ public class LogicExpressionTest extends AbstractTestCase { Env.setContext(Env.getCtx(), "ColumnSQL", "now()"); assertTrue(LogicEvaluator.evaluateLogic(evaluatee, expr)); } - + + @Test + public void testOSEnvVariable() { + String username = System.getenv("USER"); + if (username == null) + username = ""; + String expr = "@$env.USER@='" + username + "'"; + assertTrue(LegacyLogicEvaluator.evaluateLogic(evaluatee, expr)); + } + private static class ContextEvaluatee implements Evaluatee { @Override