/**
*
*/
package jframe.launcher.api;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Matcher;
/**
* <p>
* <li>NotThreadSafe</li>
* <li>support variable definition</li>
* </p>
*
* @author dzh
* @date Jan 31, 2016 3:16:27 PM
* @since 1.2
*/
public class DefConfig implements Config {
private Map<String, String> _config; //
public DefConfig() {
_config = newMap(32);
}
public DefConfig(Properties props) {
_config = newMap(props.size());
for (Map.Entry<Object, Object> e : props.entrySet()) {
_config.put((String) e.getKey(), (String) e.getValue());
}
}
protected Map<String, String> newMap(int size) {
return new HashMap<String, String>(size, 1);
}
public DefConfig(Config config) {
}
public String getConfig(String k) {
return _config.get(k);
}
public String getConfig(String k, String defval) {
String v = _config.get(k);
return v == null ? defval : v;
}
public String setConfig(String k, String v) {
return _config.put(k, v);
}
public boolean contain(String k) {
return _config.containsKey(k);
}
public Set<String> keySet() {
return _config.keySet();
}
/**
* 利用config中的变量值,替换value里的变量
*
* @param v
* @return
*/
public String replace(String input) {
return replace(this, input);
}
/**
* replace all variables in input
*
* @param system
* jvm系统变量,一般是System.getProperty
* @param input
* @return
*/
public static String replace(Config config, String input) {
Matcher m = P_VAR.matcher(input);
String var = null;
String val = null;
while (m.find()) {
var = m.group(1);
val = config.getConfig(var);
if (val == null) {
// LOG.warn("Not found variable's value: " + var);
continue;
}
input = input.replaceAll("\\$\\{" + var + "\\}", val);
}
return input;
}
public boolean hasVar(String input) {
return P_VAR.matcher(input).find();
}
}