001    package org.apache.turbine.services.template.mapper;
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 org.apache.commons.lang.StringUtils;
025    
026    import org.apache.turbine.services.template.TemplateService;
027    import org.apache.turbine.services.template.TurbineTemplate;
028    
029    /**
030     * This is a mapper like the BaseMapper but it returns its
031     * results with the extension of the template names passed or (if no
032     * extension is passed), the default extension.
033     *
034     * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
035     * @version $Id: BaseTemplateMapper.java 615328 2008-01-25 20:25:05Z tv $
036     */
037    
038    public abstract class BaseTemplateMapper
039        extends BaseMapper
040    {
041        /** A prefix which is used to separate the various template types (screen, layouts, navigation) */
042        protected String prefix = "";
043    
044        /**
045         * Default C'tor. If you use this C'tor, you must use
046         * the bean setter to set the various properties needed for
047         * this mapper before first usage.
048         */
049        public BaseTemplateMapper()
050        {
051            super();
052        }
053    
054        /**
055         * Get the Prefix value.
056         * @return the Prefix value.
057         */
058        public String getPrefix()
059        {
060            return prefix;
061        }
062    
063        /**
064         * Set the Prefix value.
065         * @param prefix The new Prefix value.
066         */
067        public void setPrefix(String prefix)
068        {
069            this.prefix = prefix;
070        }
071    
072        /**
073         * Returns the default name for the passed Template.
074         * If the template has no extension, the default extension
075         * is added.
076         * If the template is empty, the default template is
077         * returned.
078         *
079         * @param template The template name.
080         *
081         * @return the mapped default name for the template.
082         */
083        public String getDefaultName(String template)
084        {
085            String res = super.getDefaultName(template);
086    
087            // Does the Template Name component have an extension?
088            String [] components
089                = StringUtils.split(res, String.valueOf(separator));
090    
091            if (components[components.length -1 ].indexOf(TemplateService.EXTENSION_SEPARATOR) < 0)
092            {
093                StringBuffer resBuf = new StringBuffer();
094                resBuf.append(res);
095                String [] templateComponents = StringUtils.split(template, String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR));
096    
097                // Only the extension of the Template name component is interesting...
098                int dotIndex = templateComponents[templateComponents.length -1].lastIndexOf(TemplateService.EXTENSION_SEPARATOR);
099                if (dotIndex < 0)
100                {
101                    if (StringUtils.isNotEmpty(TurbineTemplate.getDefaultExtension()))
102                    {
103                        resBuf.append(TemplateService.EXTENSION_SEPARATOR);
104                        resBuf.append(TurbineTemplate.getDefaultExtension());
105                    }
106                }
107                else
108                {
109                    resBuf.append(templateComponents[templateComponents.length -1].substring(dotIndex));
110                }
111                res = resBuf.toString();
112            }
113            return res;
114        }
115    }