Repository: incubator-crail
Updated Branches:
  refs/heads/master baab8d06e -> 9b857f5de


Configuration: environment variable expansion

Enable environment variable expansion in crail-site.conf.

Close #7

Signed-off-by: Jonas Pfefferle <peppe...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-crail/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-crail/commit/9b857f5d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-crail/tree/9b857f5d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-crail/diff/9b857f5d

Branch: refs/heads/master
Commit: 9b857f5de5397fb008b217d1e2f5a67752baa1fe
Parents: baab8d0
Author: Radu Stoica <radu.ioan.sto...@gmail.com>
Authored: Tue Feb 27 15:09:45 2018 +0100
Committer: Jonas Pfefferle <peppe...@apache.org>
Committed: Fri Mar 2 10:56:23 2018 +0100

----------------------------------------------------------------------
 .../apache/crail/conf/CrailConfiguration.java   | 78 ++++++++++++++------
 1 file changed, 54 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/9b857f5d/client/src/main/java/org/apache/crail/conf/CrailConfiguration.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/crail/conf/CrailConfiguration.java 
b/client/src/main/java/org/apache/crail/conf/CrailConfiguration.java
index bde38c8..37d7a37 100644
--- a/client/src/main/java/org/apache/crail/conf/CrailConfiguration.java
+++ b/client/src/main/java/org/apache/crail/conf/CrailConfiguration.java
@@ -19,26 +19,70 @@
 
 package org.apache.crail.conf;
 
+import org.apache.crail.utils.CrailUtils;
+import org.slf4j.Logger;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.crail.utils.CrailUtils;
-import org.slf4j.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class CrailConfiguration {
        private static final Logger LOG = CrailUtils.getLogger();
        private ConcurrentHashMap<String, String> conf;
-       
-       
-       public CrailConfiguration() throws IOException{
+
+       public CrailConfiguration() throws IOException {
                conf = new ConcurrentHashMap<>();
                Properties properties = loadProperties("crail-site.conf");
                mergeProperties(properties);
        }
 
+       private static String expandEnvVars(String input) throws IOException {
+               if (null == input) {
+                       return null;
+               }
+               // match ${ENV_VAR_NAME} or $ENV_VAR_NAME
+               Pattern p = Pattern.compile("\\$\\{(\\w+)\\}|\\$(\\w+)");
+               Matcher m = p.matcher(input);
+               StringBuffer output = new StringBuffer();
+               while (m.find()) {
+                       String envVar;
+                       if (m.group(1) != null) {
+                               envVar = m.group(1);
+                       } else {
+                               envVar = m.group(2);
+                       }
+                       String envVal = System.getenv(envVar);
+                       if (envVal == null) {
+                               throw new IOException("Could not expand 
environment variable $" + envVar);
+                       }
+                       m.appendReplacement(output, envVal);
+               }
+               m.appendTail(output);
+               return output.toString();
+       }
+
+       private static Properties loadProperties(String resourceName) throws 
IOException {
+               Properties properties = new Properties();
+
+               String base = System.getenv("CRAIL_HOME");
+               FileInputStream inputStream = new FileInputStream(new File(base 
+ "/conf/" + resourceName));
+
+               try {
+                       properties.load(inputStream);
+               } finally {
+                       inputStream.close();
+               }
+               for (String key : properties.stringPropertyNames()) {
+                       String val = properties.getProperty(key);
+                       properties.setProperty(key, expandEnvVars(val));
+               }
+               return properties;
+       }
+
        public String get(String key) {
                return conf.get(key);
        }
@@ -46,9 +90,9 @@ public class CrailConfiguration {
        public void set(String key, String value) {
                conf.put(key, value);
        }
-       
+
        public boolean getBoolean(String key, boolean fallback) {
-               if (conf.containsKey(key)){
+               if (conf.containsKey(key)) {
                        return Boolean.parseBoolean(conf.get(key));
                } else {
                        return fallback;
@@ -59,27 +103,13 @@ public class CrailConfiguration {
                String value = Integer.toString(level);
                conf.put(key, value);
        }
-       
+
        private void mergeProperties(Properties properties) {
-               if (properties == null){
+               if (properties == null) {
                        return;
                }
                for (String key : properties.stringPropertyNames()) {
                        conf.put(key.trim(), 
properties.getProperty(key).trim());
                }
        }
-       
-       private static Properties loadProperties(String resourceName) throws 
IOException {
-               Properties properties = new Properties();
-
-               String base = System.getenv("CRAIL_HOME");
-               FileInputStream inputStream = new FileInputStream(new File(base 
+ "/conf/" + resourceName));
-
-               try {
-                       properties.load(inputStream);
-               } finally {
-                       inputStream.close();
-               }
-               return properties;
-       }
 }

Reply via email to