    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.TurbineServices;
    028import org.apache.turbine.services.template.TemplateService;
    029import org.apache.turbine.util.RunData;
    030import org.apache.turbine.util.uri.URIConstants;
    031
    032
    033/**
    034 * This is a wrapper for Template specific information.  It's part of
    035 * the RunData object and can extract the information it needs to do
    036 * the job directly from the data.getParameters().
    037 *
    038 * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
    039 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
    040 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
    041 * @version $Id: TemplateInfo.java 1723699 2016-01-08 11:29:21Z tv $
    042 */
    043public class TemplateInfo
    044{
    045
    046    /** Constants for tempStorage hash map. */
    047    public static final String NAVIGATION_TEMPLATE = "00navigation_template00";
    048    /** Constants for tempStorage hash map. */
    049    public static final String LAYOUT_TEMPLATE = "00layout_template00";
    050    /** Constants for tempStorage hash map. */
    051    public static final String SERVICE_NAME = "template_service";
    052
    053    /* Handle to the RunData object. */
    054    private RunData data = null;
    055
    056    /* Place to store information about templates. */
    057    private Map<String, Object> tempStorage = null;
    058
    059    /**
    060     * Constructor
    061     *
    062     * @param data A Turbine RunData object.
    063     */
    064    public TemplateInfo(RunData data)
    065    {
    066        this.data = data;
    067        tempStorage = new HashMap<String, Object>(10);
    068    }
    069
    070    /**
    071     * Get the value of navigationTemplate.
    072     *
    073     * @return A String with the value of navigationTemplate.
    074     */
    075    public String getNavigationTemplate()
    076    {
    077        return getString(TemplateInfo.NAVIGATION_TEMPLATE);
    078    }
    079
    080    /**
    081     * Set the value of navigationTemplate.
    082     *
    083     * @param v Value to assign to navigationTemplate.
    084     */
    085    public void setNavigationTemplate(String v)
    086    {
    087        setTemp(TemplateInfo.NAVIGATION_TEMPLATE, v);
    088    }
    089
    090    /**
    091     * Get the value of screen for the RunData parameters.  This
    092     * information comes from PathInfo or a QueryString.
    093     *
    094     * @return A String with the value of screen.
    095     */
    096    public String getScreenTemplate()
    097    {
    098        return data.getParameters().getString(URIConstants.CGI_TEMPLATE_PARAM, null);
    099    }
    100
    101    /**
    102     * Set the value of screen.  This is really just a method to hide
    103     * using the RunData Parameter.
    104     *
    105     * @param v Value to assign to screen.
    106     */
    107    public void setScreenTemplate(String v)
    108    {
    109        data.getParameters().setString(URIConstants.CGI_TEMPLATE_PARAM, v);
    110
    111        // We have changed the screen template so
    112        // we should now update the layout template
    113        // as well. We will use the template service
    114        // to help us out.
    115        try
    116        {
    117            TemplateService templateService = (TemplateService)TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
    118            setLayoutTemplate(templateService.getLayoutTemplateName(v));
    119        }
    120        catch (Exception e)
    121        {
    122            /*
    123             * do nothing.
    124             */
    125        }
    126    }
    127
    128    /**
    129     * Get the value of layout.
    130     *
    131     * @return A String with the value of layout.
    132     */
    133    public String getLayoutTemplate()
    134    {
    135        String value = getString(TemplateInfo.LAYOUT_TEMPLATE);
    136        return value;
    137    }
    138
    139    /**
    140     * Set the value of layout.
    141     *
    142     * @param v Value to assign to layout.
    143     */
    144    public void setLayoutTemplate(String v)
    145    {
    146        setTemp(TemplateInfo.LAYOUT_TEMPLATE, v);
    147    }
    148
    149    /**
    150     * Get the value of Template context.  This will be cast to the
    151     * proper Context by its Service.
    152     *
    153     * @param name The name of the template context.
    154     * @return An Object with the Value of context.
    155     */
    156    public Object getTemplateContext(String name)
    157    {
    158        return getTemp(name);
    159    }
    160
    161    /**
    162     * Set the value of context.
    163     *
    164     * @param name The name of the template context.
    165     * @param v Value to assign to context.
    166     */
    167    public void setTemplateContext(String name, Object v)
    168    {
    169        setTemp(name, v);
    170    }
    171
    172    /**
    173     * Get the value of service.
    174     *
    175     * @return A String with the value of service.
    176     */
    177    public String getService()
    178    {
    179        return getString(TemplateInfo.SERVICE_NAME);
    180    }
    181
    182    /**
    183     * Set the value of service.
    184     *
    185     * @param v Value to assign to service.
    186     */
    187    public void setService(String v)
    188    {
    189        setTemp(TemplateInfo.SERVICE_NAME, v);
    190    }
    191
    192    /**
    193     * Get an object from temporary storage.
    194     *
    195     * @param name A String with the name of the object.
    196     * @return An Object.
    197     */
    198    public Object getTemp(String name)
    199    {
    200        return tempStorage.get(name);
    201    }
    202
    203    /**
    204     * Get an object from temporary storage, or a default value.
    205     *
    206     * @param name A String with the name of the object.
    207     * @param def An Object, the default value.
    208     * @return An Object.
    209     */
    210    public Object getTemp(String name, Object def)
    211    {
    212        try
    213        {
    214            Object val = tempStorage.get(name);
    215            return (val != null) ? val : def;
    216        }
    217        catch (Exception e)
    218        {
    219            return def;
    220        }
    221    }
    222
    223    /**
    224     * Put an object into temporary storage.
    225     *
    226     * @param name A String with the name of the object.
    227     * @param value An Object, the value.
    228     */
    229    public void setTemp(String name, Object value)
    230    {
    231        tempStorage.put(name, value);
    232    }
    233
    234    /**
    235     * Return a String[] from the temp hash map.
    236     *
    237     * @param name A String with the name of the object.
    238     * @return A String[].
    239     */
    240    public String[] getStringArray(String name)
    241    {
    242        String[] value = null;
    243        Object object = getTemp(name, null);
    244        if (object != null)
    245        {
    246            value = (String[]) object;
    247        }
    248        return value;
    249    }
    250
    251    /**
    252     * Return a String from the temp hash map.
    253     *
    254     * @param name A String with the name of the object.
    255     * @return A String.
    256     */
    257    public String getString(String name)
    258    {
    259        String value = null;
    260        Object object = getTemp(name, null);
    261        if (object != null)
    262        {
    263            value = (String) object;
    264        }
    265        return value;
    266    }
    267
    268    /**
    269     * Remove an object from the  temporary storage.
    270     *
    271     * @param name A String with the name of the object.
    272     * @return The object that was removed or <code>null</code>
    273     *         if the name was not a key.
    274     */
    275    public Object removeTemp(String name)
    276    {
    277        return tempStorage.remove(name);
    278    }
    279
    280    /**
    281     * Returns all the available names in the temporary storage.
    282     *
    283     * @return A object array with the keys.
    284     */
    285    public Object[] getTempKeys()
    286    {
    287        return tempStorage.keySet().toArray();
    288    }
    289}