
org.postgresql.util.ExpressionProperties Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of postgresql Show documentation
Show all versions of postgresql Show documentation
PostgreSQL JDBC Driver JDBC4
/*
* Copyright (c) 2017, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.util;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExpressionProperties extends Properties {
private static final Pattern EXPRESSION = Pattern.compile("\\$\\{([^}]+)\\}");
private final Properties[] defaults;
/**
* Creates an empty property list with the specified defaults.
*
* @param defaults java.util.Properties
*/
public ExpressionProperties(Properties ...defaults) {
this.defaults = defaults;
}
/**
* Returns property value with all {@code ${propKey}} like references replaced with the value of
* the relevant property with recursive resolution.
*
* The method returns null
if the property is not found.
*
* @param key the property key.
*
* @return the value in this property list with
* the specified key value.
*/
@Override
public String getProperty(String key) {
String value = getRawPropertyValue(key);
return replaceProperties(value);
}
@Override
public String getProperty(String key, String defaultValue) {
String value = getRawPropertyValue(key);
if (value == null) {
value = defaultValue;
}
return replaceProperties(value);
}
/**
* Returns raw value of a property without any replacements
* @param key property name
* @return raw property value
*/
public String getRawPropertyValue(String key) {
String value = super.getProperty(key);
if (value != null) {
return value;
}
for (Properties properties : defaults) {
value = properties.getProperty(key);
if (value != null) {
return value;
}
}
return null;
}
private String replaceProperties(String value) {
if (value == null) {
return null;
}
Matcher matcher = EXPRESSION.matcher(value);
StringBuffer sb = null;
while (matcher.find()) {
if (sb == null) {
sb = new StringBuffer();
}
String propValue = getProperty(matcher.group(1));
if (propValue == null) {
// Use original content like ${propKey} if property is not found
propValue = matcher.group();
}
matcher.appendReplacement(sb, Matcher.quoteReplacement(propValue));
}
if (sb == null) {
return value;
}
matcher.appendTail(sb);
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy