1 /* 2 * #%L 3 * Nuiton Utils 4 * %% 5 * Copyright (C) 2004 - 2011 CodeLutin, Chatellier Eric 6 * %% 7 * This program is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU Lesser General Public License as 9 * published by the Free Software Foundation, either version 3 of the 10 * License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Lesser Public License for more details. 16 * 17 * You should have received a copy of the GNU General Lesser Public 18 * License along with this program. If not, see 19 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 20 * #L% 21 */ 22 23 package org.nuiton.util; 24 25 import java.util.Properties; 26 27 /** 28 * Overrides {@link Properties} in order to check if the expected value 29 * contains another property key like "${...}". It that case, the key 30 * will be replaced by its value if possible. 31 * 32 * Example : 33 * <pre> 34 * myFirstName=Arnaud 35 * myName=Thimel 36 * org.nuiton.topia.userInfo.fullName=${fullName} 37 * fullName=${myFirstName} ${myName} 38 * namePhrase=My name is ${myName}. 39 * instruction=Put your text like this : ${myText} 40 * </pre> 41 * 42 * Dans ce cas, 43 * <ul> 44 * <li>getProperty("org.nuiton.topia.userInfo.fullName") renverra "Arnaud Thimel" 45 * <li>getProperty("namePhrase") renverra "My name is Thimel." 46 * <li>getProperty("instruction") renverra "Put your text like this : ${myText}" 47 * </ul> 48 * 49 * @author Arnaud Thimel - thimel@codelutin.com 50 */ 51 public class RecursiveProperties extends Properties { 52 53 private static final long serialVersionUID = -5012939272780929116L; 54 55 public RecursiveProperties() { 56 } 57 58 public RecursiveProperties(Properties defaults) { 59 super(defaults); 60 } 61 62 @Override 63 public String getProperty(String key) { 64 String result = super.getProperty(key); 65 if (result == null) { 66 return null; 67 } 68 //Ex : result="My name is ${myName}." 69 int pos = result.indexOf("${", 0); 70 //Ex : pos=11 71 while (pos != -1) { 72 int posEnd = result.indexOf("}", pos + 1); 73 //Ex : posEnd=19 74 if (posEnd != -1) { 75 String value = getProperty(result.substring(pos + 2, posEnd)); 76 // Ex : getProperty("myName"); 77 if (value != null) { 78 // Ex : value="Thimel" 79 result = result.substring(0, pos) + value + result.substring(posEnd + 1); 80 // Ex : result="My name is " + "Thimel" + "." 81 pos = result.indexOf("${", pos + value.length()); 82 // Ex : pos=-1 83 } else { 84 // Ex : value=null 85 pos = result.indexOf("${", posEnd + 1); 86 // Ex : pos=-1 87 } 88 // Ex : pos=-1 89 } 90 } 91 return result; 92 } 93 94 } //RecursiveProperties