View Javadoc

1   /*
2    * EL4J, the Extension Library for the J2EE, adds incremental enhancements to
3    * the spring framework, http://el4j.sf.net
4    * Copyright (C) 2009 by ELCA Informatique SA, Av. de la Harpe 22-24,
5    * 1000 Lausanne, Switzerland, http://www.elca.ch
6    *
7    * EL4J is published under the GNU Lesser General Public License (LGPL)
8    * Version 2.1. See http://www.gnu.org/licenses/
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU Lesser General Public License for more details.
14   *
15   * For alternative licensing, please contact info@elca.ch
16   */
17  package ch.elca.el4j.env.xml;
18  
19  import java.util.Properties;
20  
21  import org.springframework.util.Assert;
22  
23  /**
24   * A utility class to evaluate maven-styled expressions.
25   *
26   * @svnLink $Revision: 3883 $;$Date: 2009-08-04 15:35:01 +0200 (Di, 04. Aug 2009) $;$Author: swismer $;$URL: https://el4j.svn.sourceforge.net/svnroot/el4j/branches/el4j_3_1/el4j/framework/modules/env/src/main/java/ch/elca/el4j/env/xml/ResolverUtils.java $
27   *
28   * @author Stefan Wismer (SWI)
29   */
30  public final class ResolverUtils {
31  	/**
32  	 * The hidden constructor.
33  	 */
34  	private ResolverUtils() { }
35  	
36  	/**
37  	 * Resolve a String containing maven-styled expressions.
38  	 * 
39  	 * @param expression    the expression to resolve
40  	 * @param values        the variable->value mapping
41  	 * @return              the resolved String
42  	 */
43  	public static String resolve(String expression, Properties values) {
44  		Assert.notNull(expression);
45  		
46  		StringBuilder builder = new StringBuilder();
47  		int cursor = 0;
48  		int start = 0;
49  		int end = 0;
50  		while ((start = expression.indexOf("${", cursor)) >= 0) {
51  			end = expression.indexOf("}", cursor + 2);
52  			if (end >= 0) {
53  				String value = values.getProperty(expression.substring(start + 2, end));
54  				if (value != null) {
55  					builder.append(expression.substring(cursor, start));
56  					builder.append(value);
57  				} else {
58  					builder.append(expression.substring(cursor, end + 1));
59  				}
60  				cursor = end + 1;
61  			} else {
62  				break;
63  			}
64  		}
65  		
66  		return builder.toString() + expression.substring(cursor);
67  	}
68  }