1 package org.apache.turbine.modules;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import org.apache.ecs.ConcreteElement;
23 import org.apache.turbine.Turbine;
24 import org.apache.turbine.pipeline.PipelineData;
25 import org.apache.turbine.util.RunData;
26
27 /**
28 * The purpose of this class is to allow one to load and execute
29 * Navigation modules.
30 *
31 * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
32 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
33 * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
34 * @version $Id: NavigationLoader.java 1078552 2011-03-06 19:58:46Z tv $
35 */
36 public class NavigationLoader
37 extends GenericLoader<Navigation>
38 implements Loader<Navigation>
39 {
40 /** The single instance of this class. */
41 private static NavigationLoader instance = new NavigationLoader();
42
43 /**
44 * These ctor's are private to force clients to use getInstance()
45 * to access this class.
46 */
47 private NavigationLoader()
48 {
49 super();
50 }
51
52 /**
53 * Attempts to load and execute the external Navigation. This is
54 * used when you want to execute a Navigation which returns its
55 * output via a MultiPartElement instead of out the data.getPage()
56 * value. This allows you to easily chain the execution of
57 * Navigation modules together.
58 *
59 * @deprecated Use PipelineData version instead.
60 * @param data Turbine information.
61 * @param name Name of object that will execute the navigation.
62 * @exception Exception a generic exception.
63 */
64 @Deprecated
65 public ConcreteElement eval(RunData data, String name)
66 throws Exception
67 {
68 // Execute Navigation
69 return getAssembler(name).build(data);
70 }
71
72 /**
73 * Attempts to load and execute the external Navigation. This is
74 * used when you want to execute a Navigation which returns its
75 * output via a MultiPartElement instead of out the data.getPage()
76 * value. This allows you to easily chain the execution of
77 * Navigation modules together.
78 *
79 * @param data Turbine information.
80 * @param name Name of object that will execute the navigation.
81 * @exception Exception a generic exception.
82 */
83 public ConcreteElement eval(PipelineData pipelineData, String name)
84 throws Exception
85 {
86 // Execute Navigation
87 return getAssembler(name).build(pipelineData);
88 }
89
90
91 /**
92 * Attempts to load and execute the external Navigation.
93 * @deprecated Use PipelineData version instead.
94 * @param data Turbine information.
95 * @param name Name of object instance.
96 * @exception Exception a generic exception.
97 */
98 @Deprecated
99 @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 }