summaryrefslogtreecommitdiffstats
path: root/core/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/common/EnvProperties.java
blob: 2e9f2673daff62301c98a69eaf8e9ad3624def4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package org.onap.ccsdk.sli.core.utils.common;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Enumeration;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EnvProperties extends Properties {

    @Override
    public synchronized void load(Reader reader) throws IOException {
        super.load(reader);
        resolveAllValues();
    }

    @Override
    public synchronized void load(InputStream inStream) throws IOException {
        super.load(inStream);
        resolveAllValues();
    }

	@Override
	public synchronized Object setProperty(String key, String value) {
		return super.setProperty(key, EnvProperties.resolveValue(value));
	}

    private void resolveAllValues() {
       Enumeration<?> propNames = propertyNames();

       while (propNames.hasMoreElements()) {
           String propName = (String) propNames.nextElement();
           super.setProperty(propName, EnvProperties.resolveValue(getProperty(propName)));
       }
       
    }

    public static String resolveValue(String value) {
        if (value == null) {
            return null;
        }

        Pattern p = Pattern.compile("\\$\\{(\\w+)((?:\\:\\-)([^\\}]*))?\\}");
        Matcher m = p.matcher(value);

        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String envVarName = null == m.group(1) ? m.group(2) : m.group(1);
            String envVarDefault = null == m.group(3) ? "" : m.group(3);
            String envVarValue = System.getenv(envVarName);

            m.appendReplacement(sb,
                null == envVarValue ? Matcher.quoteReplacement(envVarDefault) : Matcher.quoteReplacement(envVarValue));
         }
        m.appendTail(sb);
        return sb.toString();
        
    }
}