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