1 package org.apache.turbine.util.template;
2
3
4 /*
5 * Licensed to the Apache Software Foundation (ASF) under one
6 * or more contributor license agreements. See the NOTICE file
7 * distributed with this work for additional information
8 * regarding copyright ownership. The ASF licenses this file
9 * to you under the Apache License, Version 2.0 (the
10 * "License"); you may not use this file except in compliance
11 * with the License. You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing,
16 * software distributed under the License is distributed on an
17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18 * KIND, either express or implied. See the License for the
19 * specific language governing permissions and limitations
20 * under the License.
21 */
22
23
24 import java.util.HashMap;
25 import java.util.Map;
26
27 import org.apache.turbine.services.template.TurbineTemplate;
28 import org.apache.turbine.util.RunData;
29 import org.apache.turbine.util.uri.URIConstants;
30
31
32 /**
33 * This is a wrapper for Template specific information. It's part of
34 * the RunData object and can extract the information it needs to do
35 * the job directly from the data.getParameters().
36 *
37 * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
38 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
39 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
40 * @version $Id: TemplateInfo.java 1073174 2011-02-21 22:18:45Z tv $
41 */
42 public class TemplateInfo
43 {
44
45 /* Constants for tempStorage hash map. */
46 public static final String NAVIGATION_TEMPLATE = "00navigation_template00";
47 public static final String LAYOUT_TEMPLATE = "00layout_template00";
48 public static final String SERVICE_NAME = "template_service";
49
50 /* Handle to the RunData object. */
51 private RunData data = null;
52
53 /* Place to store information about templates. */
54 private Map<String, Object> tempStorage = null;
55
56 /**
57 * Constructor
58 *
59 * @param RunData A Turbine Rundata object.
60 */
61 public TemplateInfo(RunData data)
62 {
63 this.data = data;
64 tempStorage = new HashMap<String, Object>(10);
65 }
66
67 /**
68 * Get the value of navigationTemplate.
69 *
70 * @return A String with the value of navigationTemplate.
71 */
72 public String getNavigationTemplate()
73 {
74 return getString(TemplateInfo.NAVIGATION_TEMPLATE);
75 }
76
77 /**
78 * Set the value of navigationTemplate.
79 *
80 * @param v Value to assign to navigationTemplate.
81 */
82 public void setNavigationTemplate(String v)
83 {
84 setTemp(TemplateInfo.NAVIGATION_TEMPLATE, v);
85 }
86
87 /**
88 * Get the value of screen for the RunData parameters. This
89 * information comes from PathInfo or a QueryString.
90 *
91 * @return A String with the value of screen.
92 */
93 public String getScreenTemplate()
94 {
95 return data.getParameters().getString(URIConstants.CGI_TEMPLATE_PARAM, null);
96 }
97
98 /**
99 * Set the value of screen. This is really just a method to hide
100 * using the RunData Parameter.
101 *
102 * @param v Value to assign to screen.
103 */
104 public void setScreenTemplate(String v)
105 {
106 data.getParameters().setString(URIConstants.CGI_TEMPLATE_PARAM, v);
107
108 // We have changed the screen template so
109 // we should now update the layout template
110 // as well. We will use the template service
111 // to help us out.
112 try
113 {
114 setLayoutTemplate(TurbineTemplate.getLayoutTemplateName(v));
115 }
116 catch (Exception e)
117 {
118 /*
119 * do nothing.
120 */
121 }
122 }
123
124 /**
125 * Get the value of layout.
126 *
127 * @return A String with the value of layout.
128 */
129 public String getLayoutTemplate()
130 {
131 String value = getString(TemplateInfo.LAYOUT_TEMPLATE);
132 return value;
133 }
134
135 /**
136 * Set the value of layout.
137 *
138 * @param v Value to assign to layout.
139 */
140 public void setLayoutTemplate(String v)
141 {
142 setTemp(TemplateInfo.LAYOUT_TEMPLATE, v);
143 }
144
145 /**
146 * Get the value of Template context. This will be cast to the
147 * proper Context by its Service.
148 *
149 * @param name The name of the template context.
150 * @return An Object with the Value of context.
151 */
152 public Object getTemplateContext(String name)
153 {
154 return getTemp(name);
155 }
156
157 /**
158 * Set the value of context.
159 *
160 * @param name The name of the template context.
161 * @param v Value to assign to context.
162 */
163 public void setTemplateContext(String name, Object v)
164 {
165 setTemp(name, v);
166 }
167
168 /**
169 * Get the value of service.
170 *
171 * @return A String with the value of service.
172 */
173 public String getService()
174 {
175 return getString(TemplateInfo.SERVICE_NAME);
176 }
177
178 /**
179 * Set the value of service.
180 *
181 * @param v Value to assign to service.
182 */
183 public void setService(String v)
184 {
185 setTemp(TemplateInfo.SERVICE_NAME, v);
186 }
187
188 /**
189 * Get an object from temporary storage.
190 *
191 * @param name A String with the name of the object.
192 * @return An Object.
193 */
194 public Object getTemp(String name)
195 {
196 return tempStorage.get(name);
197 }
198
199 /**
200 * Get an object from temporary storage, or a default value.
201 *
202 * @param name A String with the name of the object.
203 * @param def An Object, the default value.
204 * @return An Object.
205 */
206 public Object getTemp(String name, Object def)
207 {
208 try
209 {
210 Object val = tempStorage.get(name);
211 return (val != null) ? val : def;
212 }
213 catch (Exception e)
214 {
215 return def;
216 }
217 }
218
219 /**
220 * Put an object into temporary storage.
221 *
222 * @param name A String with the name of the object.
223 * @param value An Object, the value.
224 */
225 public void setTemp(String name, Object value)
226 {
227 tempStorage.put(name, value);
228 }
229
230 /**
231 * Return a String[] from the temp hash map.
232 *
233 * @param name A String with the name of the object.
234 * @return A String[].
235 */
236 public String[] getStringArray(String name)
237 {
238 String[] value = null;
239 Object object = getTemp(name, null);
240 if (object != null)
241 {
242 value = (String[]) object;
243 }
244 return value;
245 }
246
247 /**
248 * Return a String from the temp hash map.
249 *
250 * @param name A String with the name of the object.
251 * @return A String.
252 */
253 public String getString(String name)
254 {
255 String value = null;
256 Object object = getTemp(name, null);
257 if (object != null)
258 {
259 value = (String) object;
260 }
261 return value;
262 }
263
264 /**
265 * Remove an object from the temporary storage.
266 *
267 * @param name A String with the name of the object.
268 * @return The object that was removed or <code>null</code>
269 * if the name was not a key.
270 */
271 public Object removeTemp(String name)
272 {
273 return tempStorage.remove(name);
274 }
275
276 /*
277 * Returns all the available names in the temporary storage.
278 *
279 * @return A object array with the keys.
280 */
281 public Object[] getTempKeys()
282 {
283 return tempStorage.keySet().toArray();
284 }
285 }