aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorge Hernandez <jorge.hernandez-herrero@att.com>2019-02-12 07:28:18 -0600
committerJorge Hernandez <jorge.hernandez-herrero@att.com>2019-02-12 10:23:34 -0600
commit897ba35f9c493b297f2a2d2a6d9dea743b7d39f8 (patch)
treeb3b9611c0cbb97edc386543ab8a7928a452a0f1b
parentb695d1743c34e4fb1087c8766b8c41eb3aae926e (diff)
Support of environment variables in properties
Change-Id: I5028ad3b4fb63a96607915e8b424dd2e57696bf0 Issue-ID: POLICY-1514 Signed-off-by: Jorge Hernandez <jorge.hernandez-herrero@att.com>
-rw-r--r--policy-utils/pom.xml30
-rw-r--r--policy-utils/src/main/java/org/onap/policy/drools/utils/PropertyUtil.java20
-rw-r--r--policy-utils/src/test/java/org/onap/policy/drools/utils/PropertyUtilTest.java15
-rw-r--r--policy-utils/src/test/resources/interpolation.properties4
4 files changed, 51 insertions, 18 deletions
diff --git a/policy-utils/pom.xml b/policy-utils/pom.xml
index 1938ff97..d7df3b97 100644
--- a/policy-utils/pom.xml
+++ b/policy-utils/pom.xml
@@ -3,7 +3,7 @@
============LICENSE_START=======================================================
ONAP Policy Engine - Drools PDP
================================================================================
- Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -19,22 +19,23 @@
============LICENSE_END=========================================================
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
- <artifactId>policy-utils</artifactId>
+ <artifactId>policy-utils</artifactId>
- <parent>
- <groupId>org.onap.policy.drools-pdp</groupId>
- <artifactId>drools-pdp</artifactId>
- <version>1.4.0-SNAPSHOT</version>
- </parent>
+ <parent>
+ <groupId>org.onap.policy.drools-pdp</groupId>
+ <artifactId>drools-pdp</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ </parent>
- <dependencies>
+ <dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
- </dependency>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
@@ -44,7 +45,12 @@
<groupId>org.onap.policy.common</groupId>
<artifactId>utils</artifactId>
<version>${policy.common.version}</version>
- </dependency>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-configuration2</artifactId>
+ <version>2.4</version>
+ </dependency>
</dependencies>
<build>
<plugins>
diff --git a/policy-utils/src/main/java/org/onap/policy/drools/utils/PropertyUtil.java b/policy-utils/src/main/java/org/onap/policy/drools/utils/PropertyUtil.java
index c0014f4d..3891c858 100644
--- a/policy-utils/src/main/java/org/onap/policy/drools/utils/PropertyUtil.java
+++ b/policy-utils/src/main/java/org/onap/policy/drools/utils/PropertyUtil.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* policy-utils
* ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
+import org.apache.commons.configuration2.ConfigurationConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,8 +51,10 @@ public class PropertyUtil {
private static final Logger logger = LoggerFactory.getLogger(PropertyUtil.class.getName());
/**
- * Read in a properties file.
- *
+ * Read in a properties file. Variable interpolation is performed by using
+ * apache commons configuration2 library. This allows for embedding system properties,
+ * constants, and environment variables in property files.
+ *
* @param file the properties file
* @return a Properties object, containing the associated properties
* @throws IOException - subclass 'FileNotFoundException' if the file
@@ -60,14 +63,21 @@ public class PropertyUtil {
*/
public static Properties getProperties(File file) throws IOException {
// create an InputStream (may throw a FileNotFoundException)
+ Properties rval = new Properties();
try (FileInputStream fis = new FileInputStream(file)) {
// create the properties instance
- Properties rval = new Properties();
// load properties (may throw an IOException)
rval.load(fis);
- return rval;
}
+
+ /*
+ * Return properties file with environment variables interpolated.
+ * It is necessary to construct the object in this fashion and avoid
+ * builders since they use the commons-beanutils (optional) library that has been
+ * flagged as insecured.
+ */
+ return ConfigurationConverter.getProperties(ConfigurationConverter.getConfiguration(rval));
}
/**
diff --git a/policy-utils/src/test/java/org/onap/policy/drools/utils/PropertyUtilTest.java b/policy-utils/src/test/java/org/onap/policy/drools/utils/PropertyUtilTest.java
index 05440c69..2d5d356c 100644
--- a/policy-utils/src/test/java/org/onap/policy/drools/utils/PropertyUtilTest.java
+++ b/policy-utils/src/test/java/org/onap/policy/drools/utils/PropertyUtilTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* policy-utils
* ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -34,11 +34,18 @@ import java.util.UUID;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.onap.policy.drools.utils.logging.LoggerUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PropertyUtilTest {
+
private static final Logger logger = LoggerFactory.getLogger(PropertyUtilTest.class);
+ private static final String INTERPOLATION_PROPERTIES = "src/test/resources/interpolation.properties";
+ private static final String INTERPOLATION_NO = "interpolation.no";
+ private static final String INTERPOLATION_ENV = "interpolation.env";
+ private static final String INTERPOLATION_CONST = "interpolation.const";
+ private static final String INTERPOLATION_SYS = "interpolation.sys";
private static File directory = null;
@@ -128,6 +135,12 @@ public class PropertyUtilTest {
// they should match
assertEquals(prop1, prop2);
+
+ Properties prop3 = PropertyUtil.getProperties(INTERPOLATION_PROPERTIES);
+ assertEquals("no", prop3.getProperty(INTERPOLATION_NO));
+ assertEquals(System.getenv("HOME"), prop3.getProperty(INTERPOLATION_ENV));
+ assertEquals(LoggerUtil.ROOT_LOGGER, prop3.getProperty(INTERPOLATION_CONST));
+ assertEquals(System.getProperty("user.home"), prop3.getProperty(INTERPOLATION_SYS));
}
/**
diff --git a/policy-utils/src/test/resources/interpolation.properties b/policy-utils/src/test/resources/interpolation.properties
new file mode 100644
index 00000000..66554337
--- /dev/null
+++ b/policy-utils/src/test/resources/interpolation.properties
@@ -0,0 +1,4 @@
+interpolation.no=no
+interpolation.env=${env:HOME}
+interpolation.const=${const:org.onap.policy.drools.utils.logging.LoggerUtil.ROOT_LOGGER}
+interpolation.sys=${sys:user.home}