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    }