package org.kalisen.classpathdoctor;
import java.util.ResourceBundle;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class AbstractVariableResolver implements VariableResolver {
private Environment env = null;
public AbstractVariableResolver() {
// default constructor
}
public String resolve(String path) {
if (path == null) {
throw new IllegalArgumentException(ResourceBundle.getBundle(
"UsersMessages").getString("null.is.not.a.valid.argument"));
}
String result = path;
Pattern p = getVariablePattern();
Matcher m = p.matcher(path);
String var = null;
String varValue = null;
while (m.find()) {
var = m.group();
varValue = getEnvironment().getValue(isolateVarName(var));
if (varValue != null) {
varValue = resolve(varValue);
result = path.replaceAll(Pattern.quote(var), Matcher.quoteReplacement(varValue));
}
}
return result;
}
protected abstract String isolateVarName(String var);
public Environment getEnvironment() {
if (this.env == null) {
this.env = new Environment();
}
return this.env;
}
public void setEnvironment(Environment env) {
if (env == null) {
throw new IllegalArgumentException(ResourceBundle.getBundle(
"UsersMessages").getString("null.is.not.a.valid.argument"));
}
this.env = env;
}
protected abstract Pattern getVariablePattern();
}