public Replacer(Properties replacements) { addReplacements(replacements); }
@Override public String getProperty(String property) { return replacer.replace(properties.getProperty(property)); }
public String replace(String property) { if (property == null) { return null; } StringBuilder buffer = new StringBuilder(property); int prefixStart = property.indexOf(placeholderPrefix); while (prefixStart != -1) { int replacementStart = prefixStart + placeholderPrefix.length(); int suffixStart = buffer.indexOf(placeholderSuffix, replacementStart); if (suffixStart != -1) { String placeholder = buffer.substring(replacementStart, suffixStart); String replacement = getReplacement(placeholder); if (replacement == null) { if (isIgnoreUnknownPlaceholders()) { prefixStart = buffer.indexOf(placeholderPrefix, suffixStart); } else { throw new IllegalArgumentException( format("Can't find replacement for %s placeholder", placeholder)); } } else { buffer.replace(prefixStart, suffixStart + placeholderSuffix.length(), replacement); prefixStart = buffer.indexOf(placeholderPrefix, prefixStart + replacement.length()); } } else { prefixStart = -1; } } return buffer.toString(); }
Replacer replacer = new Replacer(); replacer.addReplacements(getProperties()); replacer.addReplacements(properties); return new PropertiesConfig(properties, replacer);
@Override public String getProperty(String property, String defaultValue) { return replacer.replace(properties.getProperty(property, defaultValue)); }
@Override public Properties getProperties() { Properties target = new Properties(); for (Map.Entry<Object, Object> entry : properties.entrySet()) { target.setProperty((String) entry.getKey(), replacer.replace((String) entry.getValue())); } return target; } }