001 package org.apache.turbine.util.template;
002
003
004 /*
005 * Licensed to the Apache Software Foundation (ASF) under one
006 * or more contributor license agreements. See the NOTICE file
007 * distributed with this work for additional information
008 * regarding copyright ownership. The ASF licenses this file
009 * to you under the Apache License, Version 2.0 (the
010 * "License"); you may not use this file except in compliance
011 * with the License. You may obtain a copy of the License at
012 *
013 * http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing,
016 * software distributed under the License is distributed on an
017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
018 * KIND, either express or implied. See the License for the
019 * specific language governing permissions and limitations
020 * under the License.
021 */
022
023
024 import java.util.HashMap;
025 import java.util.Map;
026
027 import org.apache.turbine.services.template.TurbineTemplate;
028 import org.apache.turbine.util.RunData;
029 import org.apache.turbine.util.uri.URIConstants;
030
031
032 /**
033 * This is a wrapper for Template specific information. It's part of
034 * the RunData object and can extract the information it needs to do
035 * the job directly from the data.getParameters().
036 *
037 * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
038 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
039 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
040 * @version $Id: TemplateInfo.java 1073174 2011-02-21 22:18:45Z tv $
041 */
042 public class TemplateInfo
043 {
044
045 /* Constants for tempStorage hash map. */
046 public static final String NAVIGATION_TEMPLATE = "00navigation_template00";
047 public static final String LAYOUT_TEMPLATE = "00layout_template00";
048 public static final String SERVICE_NAME = "template_service";
049
050 /* Handle to the RunData object. */
051 private RunData data = null;
052
053 /* Place to store information about templates. */
054 private Map<String, Object> tempStorage = null;
055
056 /**
057 * Constructor
058 *
059 * @param RunData A Turbine Rundata object.
060 */
061 public TemplateInfo(RunData data)
062 {
063 this.data = data;
064 tempStorage = new HashMap<String, Object>(10);
065 }
066
067 /**
068 * Get the value of navigationTemplate.
069 *
070 * @return A String with the value of navigationTemplate.
071 */
072 public String getNavigationTemplate()
073 {
074 return getString(TemplateInfo.NAVIGATION_TEMPLATE);
075 }
076
077 /**
078 * Set the value of navigationTemplate.
079 *
080 * @param v Value to assign to navigationTemplate.
081 */
082 public void setNavigationTemplate(String v)
083 {
084 setTemp(TemplateInfo.NAVIGATION_TEMPLATE, v);
085 }
086
087 /**
088 * Get the value of screen for the RunData parameters. This
089 * information comes from PathInfo or a QueryString.
090 *
091 * @return A String with the value of screen.
092 */
093 public String getScreenTemplate()
094 {
095 return data.getParameters().getString(URIConstants.CGI_TEMPLATE_PARAM, null);
096 }
097
098 /**
099 * 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 }