1 package org.apache.turbine.services.template.mapper;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.List;
23 import java.util.ArrayList;
24 import java.util.Arrays;
25
26 import org.apache.commons.lang.StringUtils;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30
31 import org.apache.turbine.services.template.TemplateEngineService;
32 import org.apache.turbine.services.template.TemplateService;
33 import org.apache.turbine.services.template.TurbineTemplate;
34
35 /***
36 * This is a pretty simple mapper which returns template pathes for
37 * a supplied template name. If the path does not exist, it looks for
38 * a templated called "Default" in the same package.
39 * This path can be used by the TemplateEngine to access
40 * a certain resource to actually render the template.
41 *
42 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
43 * @version $Id: ScreenDefaultTemplateMapper.java 534527 2007-05-02 16:10:59Z tv $
44 */
45
46 public class ScreenDefaultTemplateMapper
47 extends BaseTemplateMapper
48 implements Mapper
49 {
50 /*** Logging */
51 private static Log log = LogFactory.getLog(ScreenDefaultTemplateMapper.class);
52
53 /***
54 * Default C'tor. If you use this C'tor, you must use
55 * the bean setter to set the various properties needed for
56 * this mapper before first usage.
57 */
58 public ScreenDefaultTemplateMapper()
59 {
60 }
61
62 /***
63 * Look for a given Template, then try the
64 * default.
65 *
66 * @param template The template name.
67 * @return The parsed module name.
68 */
69 public String doMapping(String template)
70 {
71 log.debug("doMapping(" + template + ")");
72
73 List components
74 = new ArrayList(Arrays.asList(StringUtils.split(
75 template,
76 String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR))));
77 int componentSize = components.size() - 1 ;
78
79
80
81 String templateName = (String) components.get(componentSize);
82 components.remove(componentSize--);
83
84 log.debug("templateName is " + templateName);
85
86
87 TemplateEngineService tes = TurbineTemplate.getTemplateEngineService(templateName);
88
89 if (tes == null)
90 {
91 return null;
92 }
93
94 String defaultName = "Default.vm";
95
96
97
98
99 boolean firstRun = !templateName.equals(defaultName);
100
101 for(;;)
102 {
103 String templatePackage = StringUtils.join(components.iterator(), String.valueOf(separator));
104
105 log.debug("templatePackage is now: " + templatePackage);
106
107 StringBuffer testName = new StringBuffer();
108
109 if (!components.isEmpty())
110 {
111 testName.append(templatePackage);
112 testName.append(separator);
113 }
114
115 testName.append((firstRun)
116 ? templateName
117 : defaultName);
118
119
120 StringBuffer templatePath = new StringBuffer();
121 if (StringUtils.isNotEmpty(prefix))
122 {
123 templatePath.append(prefix);
124 templatePath.append(separator);
125 }
126 templatePath.append(testName);
127
128 log.debug("Looking for " + templatePath);
129
130 if (tes.templateExists(templatePath.toString()))
131 {
132 log.debug("Found it, returning " + testName);
133 return testName.toString();
134 }
135
136 if (firstRun)
137 {
138 firstRun = false;
139 }
140 else
141 {
142
143
144
145
146 break;
147 }
148 }
149
150 log.debug("Returning default");
151 return getDefaultName(template);
152 }
153 }