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
| class MyProperties extends Properties {
/**
* Redéfinition de getProperty() qui évalue la chaine selon
* avant de la retourner
*/
@Override
public String getProperty(String key) {
String value = super.getProperty(key);
if (value!=null) {
// On évalue la chaine obtenu
value = resolve(value);
}
return value;
}
/** Pattern permettant de rechercher tous les ${} */
private final Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}");
/**
* Cette méthode permet de remplacer les ${} par leurs valeurs
*/
private String resolve(String input) {
// On recherche toutes les occurences de ${}
Matcher matcher = this.pattern.matcher(input);
// Si au moins une occurence est trouvé :
if (matcher.find()) {
// Il faut reconstruire la chaine
// --> On utilise un StringBuffer :
StringBuffer sb = new StringBuffer();
do {
// On récupère le nom de la clef
String key = matcher.group(1);
// On récupère sa valeur (en conservant le ${} si absent) :
String value = getProperty(key, matcher.group());
// Et on complète le buffer en effectuant le remplacement :
matcher.appendReplacement(sb, Matcher.quoteReplacement(value));
} while (matcher.find());
// Code necessaire pour rajouter la fin de la chaine :
matcher.appendTail(sb);
// Et on retourne la chaine ainsi formé :
return sb.toString();
}
// Sinon (aucun ${} présent), on renvoi la chaine telle quelle :
return input;
}
} |
Partager