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 1706239 2015-10-01 13:18:35Z tv $
41 */
42 public class TemplateInfo
43 {
44
45 /** Constants for tempStorage hash map. */
46 public static final String NAVIGATION_TEMPLATE = "00navigation_template00";
47 /** Constants for tempStorage hash map. */
48 public static final String LAYOUT_TEMPLATE = "00layout_template00";
49 /** Constants for tempStorage hash map. */
50 public static final String SERVICE_NAME = "template_service";
51
52 /* Handle to the RunData object. */
53 private RunData data = null;
54
55 /* Place to store information about templates. */
56 private Map<String, Object> tempStorage = null;
57
58 /**
59 * Constructor
60 *
61 * @param data A Turbine RunData object.
62 */
63 public TemplateInfo(RunData data)
64 {
65 this.data = data;
66 tempStorage = new HashMap<String, Object>(10);
67 }
68
69 /**
70 * Get the value of navigationTemplate.
71 *
72 * @return A String with the value of navigationTemplate.
73 */
74 public String getNavigationTemplate()
75 {
76 return getString(TemplateInfo.NAVIGATION_TEMPLATE);
77 }
78
79 /**
80 * Set the value of navigationTemplate.
81 *
82 * @param v Value to assign to navigationTemplate.
83 */
84 public void setNavigationTemplate(String v)
85 {
86 setTemp(TemplateInfo.NAVIGATION_TEMPLATE, v);
87 }
88
89 /**
90 * Get the value of screen for the RunData parameters. This
91 * information comes from PathInfo or a QueryString.
92 *
93 * @return A String with the value of screen.
94 */
95 public String getScreenTemplate()
96 {
97 return data.getParameters().getString(URIConstants.CGI_TEMPLATE_PARAM, null);
98 }
99
100 /**
101 * Set the value of screen. This is really just a method to hide
102 * using the RunData Parameter.
103 *
104 * @param v Value to assign to screen.
105 */
106 public void setScreenTemplate(String v)
107 {
108 data.getParameters().setString(URIConstants.CGI_TEMPLATE_PARAM, v);
109
110 // We have changed the screen template so
111 // we should now update the layout template
112 // as well. We will use the template service
113 // to help us out.
114 try
115 {
116 setLayoutTemplate(TurbineTemplate.getLayoutTemplateName(v));
117 }
118 catch (Exception e)
119 {
120 /*
121 * do nothing.
122 */
123 }
124 }
125
126 /**
127 * Get the value of layout.
128 *
129 * @return A String with the value of layout.
130 */
131 public String getLayoutTemplate()
132 {
133 String value = getString(TemplateInfo.LAYOUT_TEMPLATE);
134 return value;
135 }
136
137 /**
138 * Set the value of layout.
139 *
140 * @param v Value to assign to layout.
141 */
142 public void setLayoutTemplate(String v)
143 {
144 setTemp(TemplateInfo.LAYOUT_TEMPLATE, v);
145 }
146
147 /**
148 * Get the value of Template context. This will be cast to the
149 * proper Context by its Service.
150 *
151 * @param name The name of the template context.
152 * @return An Object with the Value of context.
153 */
154 public Object getTemplateContext(String name)
155 {
156 return getTemp(name);
157 }
158
159 /**
160 * Set the value of context.
161 *
162 * @param name The name of the template context.
163 * @param v Value to assign to context.
164 */
165 public void setTemplateContext(String name, Object v)
166 {
167 setTemp(name, v);
168 }
169
170 /**
171 * Get the value of service.
172 *
173 * @return A String with the value of service.
174 */
175 public String getService()
176 {
177 return getString(TemplateInfo.SERVICE_NAME);
178 }
179
180 /**
181 * Set the value of service.
182 *
183 * @param v Value to assign to service.
184 */
185 public void setService(String v)
186 {
187 setTemp(TemplateInfo.SERVICE_NAME, v);
188 }
189
190 /**
191 * Get an object from temporary storage.
192 *
193 * @param name A String with the name of the object.
194 * @return An Object.
195 */
196 public Object getTemp(String name)
197 {
198 return tempStorage.get(name);
199 }
200
201 /**
202 * Get an object from temporary storage, or a default value.
203 *
204 * @param name A String with the name of the object.
205 * @param def An Object, the default value.
206 * @return An Object.
207 */
208 public Object getTemp(String name, Object def)
209 {
210 try
211 {
212 Object val = tempStorage.get(name);
213 return (val != null) ? val : def;
214 }
215 catch (Exception e)
216 {
217 return def;
218 }
219 }
220
221 /**
222 * Put an object into temporary storage.
223 *
224 * @param name A String with the name of the object.
225 * @param value An Object, the value.
226 */
227 public void setTemp(String name, Object value)
228 {
229 tempStorage.put(name, value);
230 }
231
232 /**
233 * Return a String[] from the temp hash map.
234 *
235 * @param name A String with the name of the object.
236 * @return A String[].
237 */
238 public String[] getStringArray(String name)
239 {
240 String[] value = null;
241 Object object = getTemp(name, null);
242 if (object != null)
243 {
244 value = (String[]) object;
245 }
246 return value;
247 }
248
249 /**
250 * Return a String from the temp hash map.
251 *
252 * @param name A String with the name of the object.
253 * @return A String.
254 */
255 public String getString(String name)
256 {
257 String value = null;
258 Object object = getTemp(name, null);
259 if (object != null)
260 {
261 value = (String) object;
262 }
263 return value;
264 }
265
266 /**
267 * Remove an object from the temporary storage.
268 *
269 * @param name A String with the name of the object.
270 * @return The object that was removed or <code>null</code>
271 * if the name was not a key.
272 */
273 public Object removeTemp(String name)
274 {
275 return tempStorage.remove(name);
276 }
277
278 /**
279 * Returns all the available names in the temporary storage.
280 *
281 * @return A object array with the keys.
282 */
283 public Object[] getTempKeys()
284 {
285 return tempStorage.keySet().toArray();
286 }
287 }