001package 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
024import java.util.HashMap;
025import java.util.Map;
026
027import org.apache.turbine.services.template.TurbineTemplate;
028import org.apache.turbine.util.RunData;
029import 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 1706239 2015-10-01 13:18:35Z tv $
041 */
042public class TemplateInfo
043{
044
045    /** Constants for tempStorage hash map. */
046    public static final String NAVIGATION_TEMPLATE = "00navigation_template00";
047    /** Constants for tempStorage hash map. */
048    public static final String LAYOUT_TEMPLATE = "00layout_template00";
049    /** Constants for tempStorage hash map. */
050    public static final String SERVICE_NAME = "template_service";
051
052    /* Handle to the RunData object. */
053    private RunData data = null;
054
055    /* Place to store information about templates. */
056    private Map<String, Object> tempStorage = null;
057
058    /**
059     * Constructor
060     *
061     * @param data A Turbine RunData object.
062     */
063    public TemplateInfo(RunData data)
064    {
065        this.data = data;
066        tempStorage = new HashMap<String, Object>(10);
067    }
068
069    /**
070     * Get the value of navigationTemplate.
071     *
072     * @return A String with the value of navigationTemplate.
073     */
074    public String getNavigationTemplate()
075    {
076        return getString(TemplateInfo.NAVIGATION_TEMPLATE);
077    }
078
079    /**
080     * Set the value of navigationTemplate.
081     *
082     * @param v Value to assign to navigationTemplate.
083     */
084    public void setNavigationTemplate(String v)
085    {
086        setTemp(TemplateInfo.NAVIGATION_TEMPLATE, v);
087    }
088
089    /**
090     * Get the value of screen for the RunData parameters.  This
091     * information comes from PathInfo or a QueryString.
092     *
093     * @return A String with the value of screen.
094     */
095    public String getScreenTemplate()
096    {
097        return data.getParameters().getString(URIConstants.CGI_TEMPLATE_PARAM, null);
098    }
099
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}