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.turbine.Turbine;
25 import org.apache.turbine.pipeline.PipelineData;
26
27 /**
28 * The purpose of this class is to allow one to load and execute
29 * Screen 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: ScreenLoader.java 1773378 2016-12-09 13:19:59Z tv $
35 */
36 public class ScreenLoader
37 extends GenericLoader<Screen>
38 implements Loader<Screen>
39 {
40 /** The single instance of this class. */
41 private static ScreenLoader instance = new ScreenLoader();
42
43 /**
44 * These ctor's are private to force clients to use getInstance()
45 * to access this class.
46 */
47 private ScreenLoader()
48 {
49 super();
50 }
51
52 /**
53 * Attempts to load and execute the external Screen. This is used
54 * when you want to execute a Screen which returns its output via
55 * a String instead of out the data.getResponse() value.
56 * This allows you to easily chain the execution of Screen modules
57 * together.
58 *
59 * @param pipelineData Turbine information.
60 * @param name Name of object that will execute the screen.
61 * @return the output of the screen module
62 * @throws Exception a generic exception.
63 */
64 public String eval(PipelineData pipelineData, String name)
65 throws Exception
66 {
67 // Execute screen
68 return getAssembler(name).build(pipelineData);
69 }
70
71 /**
72 * Attempts to load and execute the Screen. This is used when you
73 * want to execute a Screen which returns its output via the
74 * data.getResponse() object.
75 *
76 * @param pipelineData Turbine information.
77 * @param name Name of object that will execute the screen.
78 * @throws Exception a generic exception.
79 */
80 @Override
81 public void exec(PipelineData pipelineData, String name)
82 throws Exception
83 {
84 this.eval(pipelineData, name);
85 }
86
87 /**
88 * Pulls out an instance of the object by name. Name is just the
89 * single name of the object.
90 *
91 * @param name Name of object instance.
92 * @return A Screen with the specified name, or null.
93 * @throws Exception a generic exception.
94 */
95 @Override
96 public Screen getAssembler(String name)
97 throws Exception
98 {
99 return getAssembler(Screen.class, name);
100 }
101
102 /**
103 * @see org.apache.turbine.modules.Loader#getCacheSize()
104 */
105 @Override
106 public int getCacheSize()
107 {
108 return ScreenLoader.getConfiguredCacheSize();
109 }
110
111 /**
112 * The method through which this class is accessed.
113 *
114 * @return The single instance of this class.
115 */
116 public static ScreenLoader getInstance()
117 {
118 return instance;
119 }
120
121 /**
122 * Helper method to get the configured cache size for this module
123 *
124 * @return the configure cache size
125 */
126 private static int getConfiguredCacheSize()
127 {
128 return Turbine.getConfiguration().getInt(Screen.CACHE_SIZE_KEY,
129 Screen.CACHE_SIZE_DEFAULT);
130 }
131 }