001    package org.apache.turbine.modules;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *   http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import org.apache.ecs.ConcreteElement;
023    import org.apache.turbine.Turbine;
024    import org.apache.turbine.pipeline.PipelineData;
025    import org.apache.turbine.util.RunData;
026    
027    /**
028     * The purpose of this class is to allow one to load and execute
029     * Navigation modules.
030     *
031     * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
032     * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
033     * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
034     * @version $Id: NavigationLoader.java 1078552 2011-03-06 19:58:46Z tv $
035     */
036    public class NavigationLoader
037        extends GenericLoader<Navigation>
038        implements Loader<Navigation>
039    {
040        /** The single instance of this class. */
041        private static NavigationLoader instance = new NavigationLoader();
042    
043        /**
044         * These ctor's are private to force clients to use getInstance()
045         * to access this class.
046         */
047        private NavigationLoader()
048        {
049            super();
050        }
051    
052        /**
053         * Attempts to load and execute the external Navigation. This is
054         * used when you want to execute a Navigation which returns its
055         * output via a MultiPartElement instead of out the data.getPage()
056         * value.  This allows you to easily chain the execution of
057         * Navigation modules together.
058         *
059         * @deprecated Use PipelineData version instead.
060         * @param data Turbine information.
061         * @param name Name of object that will execute the navigation.
062         * @exception Exception a generic exception.
063         */
064        @Deprecated
065        public ConcreteElement eval(RunData data, String name)
066                throws Exception
067        {
068            // Execute Navigation
069            return getAssembler(name).build(data);
070        }
071    
072        /**
073         * Attempts to load and execute the external Navigation. This is
074         * used when you want to execute a Navigation which returns its
075         * output via a MultiPartElement instead of out the data.getPage()
076         * value.  This allows you to easily chain the execution of
077         * Navigation modules together.
078         *
079         * @param data Turbine information.
080         * @param name Name of object that will execute the navigation.
081         * @exception Exception a generic exception.
082         */
083        public ConcreteElement eval(PipelineData pipelineData, String name)
084                throws Exception
085        {
086            // Execute Navigation
087            return getAssembler(name).build(pipelineData);
088        }
089    
090    
091        /**
092         * Attempts to load and execute the external Navigation.
093         * @deprecated Use PipelineData version instead.
094         * @param data Turbine information.
095         * @param name Name of object instance.
096         * @exception Exception a generic exception.
097         */
098        @Deprecated
099        @Override
100        public void exec(RunData data, String name)
101                throws Exception
102        {
103            this.eval(data, name);
104        }
105    
106        /**
107         * Attempts to load and execute the external Navigation.
108         *
109         * @param pipelineData Turbine information.
110         * @param name Name of object instance.
111         * @exception Exception a generic exception.
112         */
113        @Override
114        public void exec(PipelineData pipelineData, String name)
115                    throws Exception
116        {
117            this.eval(pipelineData, name);
118        }
119    
120    
121        /**
122         * Pulls out an instance of the object by name.  Name is just the
123         * single name of the object. This is equal to getInstance but
124         * returns an Assembler object and is needed to fulfil the Loader
125         * interface.
126         *
127         * @param name Name of object instance.
128         * @return A Layout with the specified name, or null.
129         * @exception Exception a generic exception.
130         */
131        public Navigation getAssembler(String name)
132            throws Exception
133        {
134            return getAssembler(Navigation.NAME, name);
135        }
136    
137        /**
138         * @see org.apache.turbine.modules.Loader#getCacheSize()
139         */
140        public int getCacheSize()
141        {
142            return NavigationLoader.getConfiguredCacheSize();
143        }
144    
145        /**
146         * The method through which this class is accessed.
147         *
148         * @return The single instance of this class.
149         */
150        public static NavigationLoader getInstance()
151        {
152            return instance;
153        }
154    
155        /**
156         * Helper method to get the configured cache size for this module
157         *
158         * @return the configure cache size
159         */
160        private static int getConfiguredCacheSize()
161        {
162            return Turbine.getConfiguration().getInt(Navigation.CACHE_SIZE_KEY,
163                    Navigation.CACHE_SIZE_DEFAULT);
164        }
165    }