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
23
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.List;
27
28 import org.apache.commons.lang.StringUtils;
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31 import org.apache.turbine.modules.Assembler;
32 import org.apache.turbine.modules.Loader;
33 import org.apache.turbine.services.template.TemplateService;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public class ClassMapper
55 extends BaseMapper
56 implements Mapper
57 {
58
59 private Loader<? extends Assembler> loader = null;
60
61
62 private static Log log = LogFactory.getLog(ClassMapper.class);
63
64
65
66
67
68
69 public ClassMapper()
70 {
71
72 }
73
74
75
76
77
78 public Loader<? extends Assembler> getLoader()
79 {
80 return loader;
81 }
82
83
84
85
86
87 public void setLoader(Loader<? extends Assembler> loader)
88 {
89 this.loader = loader;
90 log.debug("Loader is " + this.loader);
91 }
92
93
94
95
96
97
98
99
100 public String doMapping(String template)
101 {
102 log.debug("doMapping(" + template + ")");
103
104
105 List<String> components
106 = new ArrayList<String>(Arrays.asList(StringUtils.split(
107 template,
108 String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR))));
109 int componentSize = components.size() - 1 ;
110
111
112
113 String className = components.get(componentSize);
114 components.remove(componentSize--);
115
116 log.debug("className is " + className);
117
118
119 int dotIndex = className.lastIndexOf(TemplateService.EXTENSION_SEPARATOR);
120 className = (dotIndex < 0) ? className : className.substring(0, dotIndex);
121
122
123
124
125 boolean firstRun = !className.equals(TemplateService.DEFAULT_NAME);
126
127 for(;;)
128 {
129 String pkg = StringUtils.join(components.iterator(), String.valueOf(separator));
130 StringBuilder testName = new StringBuilder();
131
132 log.debug("classPackage is now: " + pkg);
133
134 if (!components.isEmpty())
135 {
136 testName.append(pkg);
137 testName.append(separator);
138 }
139
140 testName.append((firstRun)
141 ? className
142 : TemplateService.DEFAULT_NAME);
143
144 log.debug("Looking for " + testName);
145 try
146 {
147 loader.getAssembler(testName.toString());
148 log.debug("Found it, returning " + testName);
149 return testName.toString();
150 }
151 catch (Exception e)
152 {
153
154 }
155
156 if (firstRun)
157 {
158 firstRun = false;
159 }
160 else
161 {
162 if (components.isEmpty())
163 {
164 break;
165 }
166 components.remove(componentSize--);
167 }
168 }
169
170 log.debug("Returning default");
171 return getDefaultName(template);
172 }
173 }
174
175
176
177