01: /* Copyright (c) 2006-2007, Vladimir Nikic
02: All rights reserved.
03:
04: Redistribution and use of this software in source and binary forms,
05: with or without modification, are permitted provided that the following
06: conditions are met:
07:
08: * Redistributions of source code must retain the above
09: copyright notice, this list of conditions and the
10: following disclaimer.
11:
12: * Redistributions in binary form must reproduce the above
13: copyright notice, this list of conditions and the
14: following disclaimer in the documentation and/or other
15: materials provided with the distribution.
16:
17: * The name of Web-Harvest may not be used to endorse or promote
18: products derived from this software without specific prior
19: written permission.
20:
21: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22: AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25: LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26: CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27: SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28: INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30: ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31: POSSIBILITY OF SUCH DAMAGE.
32:
33: You can contact Vladimir Nikic by sending e-mail to
34: nikic_vladimir@yahoo.com. Please include the word "Web-Harvest" in the
35: subject line.
36: */
37: package org.webharvest.runtime.templaters;
38:
39: import org.webharvest.runtime.scripting.ScriptEngine;
40:
41: /**
42: * Simple templater - replaces ${expression} sequences in string with evaluated expressions.
43: * Specified script engine is used for evaluation.
44: */
45: public class BaseTemplater {
46:
47: public static String VAR_START = "${";
48: public static String VAR_END = "}";
49:
50: public static String execute(String source,
51: ScriptEngine scriptEngine) {
52: if (source == null) {
53: return source;
54: }
55:
56: String result = "";
57:
58: int startIndex = source.indexOf(VAR_START);
59: int endIndex = -1;
60:
61: while (startIndex >= 0 && startIndex < source.length()) {
62: result += source.substring(endIndex + 1, startIndex);
63: endIndex = source.indexOf(VAR_END, startIndex);
64:
65: if (endIndex > startIndex) {
66: String expression = source.substring(startIndex
67: + VAR_START.length(), endIndex);
68: Object resultObj = scriptEngine.eval(expression);
69: result += resultObj == null ? "" : resultObj.toString();
70: }
71:
72: startIndex = source.indexOf(VAR_START, Math.max(endIndex
73: + VAR_END.length(), startIndex + 1));
74: }
75:
76: result += source.substring(endIndex + 1);
77:
78: return result;
79: }
80:
81: }
|