    001    package 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
    024    import org.apache.ecs.ConcreteElement;
    025    import org.apache.turbine.Turbine;
    026    import org.apache.turbine.pipeline.PipelineData;
    027    import org.apache.turbine.util.RunData;
    028
    029    /**
    030     * The purpose of this class is to allow one to load and execute
    031     * Screen modules.
    032     *
    033     * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
    034     * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
    035     * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
    036     * @version $Id: ScreenLoader.java 1078552 2011-03-06 19:58:46Z tv $
    037     */
    038    public class ScreenLoader
    039        extends GenericLoader<Screen>
    040        implements Loader<Screen>
    041    {
    042        /** The single instance of this class. */
    043        private static ScreenLoader instance = new ScreenLoader();
    044
    045        /**
    046         * These ctor's are private to force clients to use getInstance()
    047         * to access this class.
    048         */
    049        private ScreenLoader()
    050        {
    051            super();
    052        }
    053
    054        /**
    055         * Attempts to load and execute the external Screen. This is used
    056         * when you want to execute a Screen which returns its output via
    057         * a MultiPartElement instead of out the data.getPage() value.
    058         * This allows you to easily chain the execution of Screen modules
    059         * together.
    060         *
    061         * @deprecated Use PipelineData version instead.
    062         * @param data Turbine information.
    063         * @param name Name of object that will execute the screen.
    064         * @exception Exception a generic exception.
    065         */
    066        @Deprecated
    067        public ConcreteElement eval(RunData data, String name)
    068                throws Exception
    069        {
    070            // Execute screen
    071            return getAssembler(name).build(data);
    072        }
    073
    074        /**
    075         * Attempts to load and execute the external Screen. This is used
    076         * when you want to execute a Screen which returns its output via
    077         * a MultiPartElement instead of out the data.getPage() value.
    078         * This allows you to easily chain the execution of Screen modules
    079         * together.
    080         *
    081         * @param data Turbine information.
    082         * @param name Name of object that will execute the screen.
    083         * @exception Exception a generic exception.
    084         */
    085        public ConcreteElement eval(PipelineData pipelineData, String name)
    086                throws Exception
    087        {
    088            // Execute screen
    089            return getAssembler(name).build(pipelineData);
    090        }
    091
    092        /**
    093         * Attempts to load and execute the Screen. This is used when you
    094         * want to execute a Screen which returns its output via the
    095         * data.getPage() object.
    096         * @deprecated Use PipelineData version instead.
    097         * @param data Turbine information.
    098         * @param name Name of object that will execute the screen.
    099         * @exception Exception a generic exception.
    100         */
    101        @Deprecated
    102        @Override
    103        public void exec(RunData data, String name)
    104                throws Exception
    105        {
    106            this.eval(data, name);
    107        }
    108
    109        /**
    110         * Attempts to load and execute the Screen. This is used when you
    111         * want to execute a Screen which returns its output via the
    112         * data.getPage() object.
    113         *
    114         * @param data Turbine information.
    115         * @param name Name of object that will execute the screen.
    116         * @exception Exception a generic exception.
    117         */
    118        @Override
    119        public void exec(PipelineData pipelineData, String name)
    120            throws Exception
    121            {
    122            this.eval(pipelineData, name);
    123            }
    124
    125        /**
    126         * Pulls out an instance of the object by name.  Name is just the
    127         * single name of the object. This is equal to getInstance but
    128         * returns an Assembler object and is needed to fulfil the Loader
    129         * interface.
    130         *
    131         * @param name Name of object instance.
    132         * @return A Screen with the specified name, or null.
    133         * @exception Exception a generic exception.
    134         */
    135        public Screen getAssembler(String name)
    136            throws Exception
    137        {
    138            return getAssembler(Screen.NAME, name);
    139        }
    140
    141        /**
    142         * @see org.apache.turbine.modules.Loader#getCacheSize()
    143         */
    144        public int getCacheSize()
    145        {
    146            return ScreenLoader.getConfiguredCacheSize();
    147        }
    148
    149        /**
    150         * The method through which this class is accessed.
    151         *
    152         * @return The single instance of this class.
    153         */
    154        public static ScreenLoader getInstance()
    155        {
    156            return instance;
    157        }
    158
    159        /**
    160         * Helper method to get the configured cache size for this module
    161         *
    162         * @return the configure cache size
    163         */
    164        private static int getConfiguredCacheSize()
    165        {
    166            return Turbine.getConfiguration().getInt(Screen.CACHE_SIZE_KEY,
    167                    Screen.CACHE_SIZE_DEFAULT);
    168        }
    169    }