001    package org.apache.turbine.modules.navigations;
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.ecs.ConcreteElement;
025    import org.apache.ecs.StringElement;
026    import org.apache.turbine.modules.Navigation;
027    import org.apache.turbine.pipeline.PipelineData;
028    import org.apache.turbine.services.template.TurbineTemplate;
029    import org.apache.turbine.services.velocity.TurbineVelocity;
030    import org.apache.turbine.util.RunData;
031    import org.apache.velocity.context.Context;
032    
033    /**
034     * VelocityNavigation.  This screen relies on the VelocityPage
035     * being set as the default page.  The doBuildTemplate() assumes the
036     * user has put the template filename in the RunData parameter and set
037     * it to the value of the template file to execute.  Specialized
038     * Navigations screens should extend this class and override the
039     * doBuildTemplate( data , context) method.
040     *
041     * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
042     * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
043     * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
044     * @version $Id: VelocityNavigation.java 1078552 2011-03-06 19:58:46Z tv $
045     */
046    public class VelocityNavigation
047            extends TemplateNavigation
048    {
049        /** The prefix for lookup up navigation pages */
050        private final String prefix = Navigation.PREFIX + "/";
051    
052        /**
053         * Velocity Navigations extending this class should overide this
054         * method to perform any particular business logic and add
055         * information to the context.
056         *
057         * @deprecated Use PipelineData version instead.
058         * @param data Turbine information.
059         * @param context Context for web pages.
060         * @exception Exception, a generic exception.
061         */
062        @Deprecated
063        protected void doBuildTemplate(RunData data,
064                                       Context context)
065                throws Exception
066        {
067            // empty
068        }
069    
070        /**
071         * Velocity Navigations extending this class should overide this
072         * method to perform any particular business logic and add
073         * information to the context.
074         *
075         * @param data Turbine information.
076         * @param context Context for web pages.
077         * @exception Exception, a generic exception.
078         */
079        protected void doBuildTemplate(PipelineData pipelineData,
080                                       Context context)
081                throws Exception
082        {
083            // empty
084        }
085    
086        /**
087         * Needs to be implemented to make TemplateNavigation like us.
088         * The actual method that you should override is the one with the
089         * context in the parameter list.
090         *
091         * @deprecated Use PipelineData version instead.
092         * @param data Turbine information.
093         * @exception Exception, a generic exception.
094         */
095        @Deprecated
096        @Override
097        protected void doBuildTemplate(RunData data)
098                throws Exception
099        {
100            doBuildTemplate(data, TurbineVelocity.getContext(data));
101        }
102    
103    
104        /**
105         * Needs to be implemented to make TemplateNavigation like us.
106         * The actual method that you should override is the one with the
107         * context in the parameter list.
108         *
109         * @param pipelineData Turbine information.
110         * @exception Exception, a generic exception.
111         */
112        @Override
113        protected void doBuildTemplate(PipelineData pipelineData)
114                throws Exception
115        {
116            doBuildTemplate(pipelineData, TurbineVelocity.getContext(pipelineData));
117        }
118    
119        /**
120         * This Builds the Velocity template.
121         *
122         * @deprecated Use PipelineData version instead.
123         * @param data Turbine information.
124         * @return A ConcreteElement.
125         * @exception Exception, a generic exception.
126         */
127        @Deprecated
128        @Override
129        public ConcreteElement buildTemplate(RunData data)
130                throws Exception
131        {
132            Context context = TurbineVelocity.getContext(data);
133    
134            String navigationTemplate = data.getTemplateInfo().getNavigationTemplate();
135            String templateName
136                    = TurbineTemplate.getNavigationTemplateName(navigationTemplate);
137    
138            StringElement output = new StringElement();
139            output.setFilterState(false);
140            output.addElement(TurbineVelocity
141                    .handleRequest(context, prefix + templateName));
142            return output;
143        }
144    
145        /**
146         * This Builds the Velocity template.
147         *
148         * @param data Turbine information.
149         * @return A ConcreteElement.
150         * @exception Exception, a generic exception.
151         */
152        @Override
153        public ConcreteElement buildTemplate(PipelineData pipelineData)
154                throws Exception
155        {
156            RunData data = getRunData(pipelineData);
157            Context context = TurbineVelocity.getContext(pipelineData);
158    
159            String navigationTemplate = data.getTemplateInfo().getNavigationTemplate();
160            String templateName
161                    = TurbineTemplate.getNavigationTemplateName(navigationTemplate);
162    
163            StringElement output = new StringElement();
164            output.setFilterState(false);
165            output.addElement(TurbineVelocity
166                    .handleRequest(context, prefix + templateName));
167            return output;
168        }
169    
170    
171    }