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