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 }