    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 org.apache.commons.logging.Log;
    025    import org.apache.commons.logging.LogFactory;
    026    import org.apache.ecs.ConcreteElement;
    027    import org.apache.turbine.modules.Screen;
    028    import org.apache.turbine.modules.ScreenLoader;
    029    import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
    030    import org.apache.turbine.util.RunData;
    031
    032    /**
    033     * Returns output of a Screen module.  An instance of this is
    034     * placed in the Velocity context by the VelocityDirectLayout.  This
    035     * allows the screen to be executed only at rendering.
    036     * Here's how it's used in a template:
    037     *
    038     * <p>
    039     * <code>
    040     * $screen_placeholder
    041     * </code>
    042     * <p>
    043     * <code>
    044     * $screen_placeholder.setScreen("Test")
    045     * </code>
    046     * </p>
    047     *
    048     * @author <a href="raphael@apache.org">Raphaël Luta</a>
    049     * @version $Id: TemplateScreen.java 1071044 2011-02-15 20:47:31Z tv $
    050     */
    051    public class TemplateScreen
    052    {
    053        /** Logging */
    054        private static Log log = LogFactory.getLog(TemplateScreen.class);
    055
    056        /* The RunData object. */
    057        private RunData data;
    058
    059        /* The name of the screen template. */
    060        private String screen;
    061
    062        private ScreenLoader screenLoader;
    063
    064        /**
    065         * Constructor
    066         *
    067         * @param data A Turbine RunData object.
    068         */
    069        public TemplateScreen(RunData data)
    070        {
    071            this.data = data;
    072            this.screen = data.getScreen();
    073            this.screenLoader = (ScreenLoader)TurbineAssemblerBroker.getLoader(Screen.NAME);
    074        }
    075
    076        /**
    077         * Set the screen.
    078         *
    079         * @param screen A String with the name of the screen module
    080         * @return A TemplateScreen (self).
    081         */
    082        public TemplateScreen setScreen(String screen)
    083        {
    084            this.screen = screen;
    085            return this;
    086        }
    087
    088        /**
    089         * Builds the output of the navigation template.
    090         *
    091         * @return A String.
    092         */
    093        public String toString()
    094        {
    095            String returnValue = "";
    096
    097            try
    098            {
    099                ConcreteElement results = screenLoader.eval(data, this.screen);
    100
    101                if (results != null)
    102                {
    103                    returnValue = results.toString();
    104                }
    105            }
    106            catch (Exception e)
    107            {
    108                log.error(e);
    109            }
    110
    111            return returnValue;
    112        }
    113    }