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; - } }