1 package org.apache.turbine.modules.screens;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import org.apache.ecs.ConcreteElement;
20 import org.apache.turbine.modules.Screen;
21 import org.apache.turbine.util.RunData;
22
23 /***
24 * Base class for writing Screens that output binary data. This class
25 * is provided as a helper class for those who want to write Screens
26 * that output raw binary data. For example, it may be extended into
27 * a Screen that outputs a SVG file or a SWF (Flash Player format)
28 * movie. The only thing one has to do is to implement the two
29 * methods <code>getContentType(RunData data)</code> and
30 * <code>doOutput(RunData data)</code> (see below).
31 *
32 * <p> You migth want to take a look at the ImageServer screen class
33 * contained in the TDK.<br>
34 *
35 * @author <a href="mailto:rkoenig@chez.com">Regis Koenig</a>
36 * @version $Id: RawScreen.java 264148 2005-08-29 14:21:04Z henning $
37 */
38 public abstract class RawScreen extends Screen
39 {
40 /***
41 * Build the Screen. This method actually makes a call to the
42 * doOutput() method in order to generate the Screen content.
43 *
44 * @param data Turbine information.
45 * @return A ConcreteElement.
46 * @exception Exception, a generic exception.
47 */
48 protected final ConcreteElement doBuild(RunData data)
49 throws Exception
50 {
51 data.getResponse().setContentType(getContentType(data));
52 data.declareDirectResponse();
53 doOutput(data);
54 return null;
55 }
56
57 /***
58 * Set the content type. This method should be overidden to
59 * actually set the real content-type header of the output.
60 *
61 * @param data Turbine information.
62 * @return A String with the content type.
63 */
64 protected abstract String getContentType(RunData data);
65
66 /***
67 * Actually output the dynamic content. The OutputStream can be
68 * accessed like this: <pre>OutputStream out =
69 * data.getResponse().getOutputStream();</pre>.
70 *
71 * @param data Turbine information.
72 * @exception Exception, a generic exception.
73 */
74 protected abstract void doOutput(RunData data)
75 throws Exception;
76
77 /***
78 * The layout must be set to null.
79 *
80 * @param data Turbine information.
81 * @return A null String.
82 */
83 public final String getLayout(RunData data)
84 {
85 return null;
86 }
87 }