001package org.apache.turbine.modules;
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 org.apache.turbine.pipeline.PipelineData;
025import org.apache.turbine.util.RunData;
026
027/**
028 * This is the base class which defines the Screen modules.
029 *
030 * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
031 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
032 * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
033 * @version $Id: Screen.java 1773378 2016-12-09 13:19:59Z tv $
034 */
035public abstract class Screen
036    extends Assembler
037{
038    /** Prefix for screen related classes and templates */
039    public static final String PREFIX = "screens";
040
041    /** Property for the size of the screen cache if caching is on */
042    public static final String CACHE_SIZE_KEY = "screen.cache.size";
043
044    /** The default size for the screen cache */
045    public static final int CACHE_SIZE_DEFAULT = 50;
046
047    /** Represents Screen Objects */
048    public static final String NAME = "screen";
049
050    /**
051     * @see org.apache.turbine.modules.Assembler#getPrefix()
052     */
053    @Override
054    public String getPrefix()
055    {
056        return PREFIX;
057    }
058
059    /**
060     * A subclass must override this method to build itself.
061     * Subclasses override this method to store the screen in RunData
062     * or to write the screen to the output stream referenced in
063     * RunData.
064     * @param pipelineData Turbine information.
065     * @return the content of the screen
066     * @throws Exception a generic exception.
067     */
068    protected abstract String doBuild(PipelineData pipelineData) throws Exception;
069
070    /**
071     * Subclasses can override this method to add additional
072     * functionality.  This method is protected to force clients to
073     * use ScreenLoader to build a Screen.
074     *
075     * @param pipelineData Turbine information.
076     * @return the content of the screen
077     * @throws Exception a generic exception.
078     */
079    protected String build(PipelineData pipelineData)
080        throws Exception
081    {
082        return doBuild(pipelineData);
083    }
084
085    /**
086     * If the Layout has not been defined by the Screen then set the
087     * layout to be "DefaultLayout".  The Screen object can also
088     * override this method to provide intelligent determination of
089     * the Layout to execute.  You can also define that logic here as
090     * well if you want it to apply on a global scale.  For example,
091     * if you wanted to allow someone to define Layout "preferences"
092     * where they could dynamically change the Layout for the entire
093     * site.  The information for the request is passed in with the
094     * PipelineData object.
095     *
096     * @param pipelineData Turbine information.
097     * @return A String with the Layout.
098     */
099    public String getLayout(PipelineData pipelineData)
100    {
101        RunData data = getRunData(pipelineData);
102        return data.getLayout();
103    }
104
105    /**
106     * Set the layout for a Screen.
107     *
108     * @param pipelineData Turbine information.
109     * @param layout The layout name.
110     */
111    public void setLayout(PipelineData pipelineData, String layout)
112    {
113        RunData data = getRunData(pipelineData);
114        data.setLayout(layout);
115    }
116}