View Javadoc
1   package org.apache.turbine.util;
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 java.io.IOException;
25  import java.io.PrintWriter;
26  import java.util.Locale;
27  import java.util.Map;
28  
29  import javax.naming.Context;
30  import javax.servlet.ServletConfig;
31  import javax.servlet.ServletContext;
32  import javax.servlet.http.HttpServletRequest;
33  import javax.servlet.http.HttpServletResponse;
34  import javax.servlet.http.HttpSession;
35  
36  import org.apache.fulcrum.parser.CookieParser;
37  import org.apache.fulcrum.parser.ParameterParser;
38  import org.apache.fulcrum.security.acl.AccessControlList;
39  import org.apache.turbine.om.security.User;
40  import org.apache.turbine.pipeline.PipelineData;
41  import org.apache.turbine.util.template.TemplateInfo;
42  
43  /**
44   * RunData is an interface to run-time information that is passed
45   * within Turbine. This provides the threading mechanism for the
46   * entire system because multiple requests can potentially come in
47   * at the same time.  Thus, there is only one RunData instance
48   * for each request that is being serviced.
49   *
50   * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
51   * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
52   * @author <a href="mailto:bhoeneis@ee.ethz.ch">Bernie Hoeneisen</a>
53   * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
54   * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
55   * @version $Id: RunData.java 1850675 2019-01-07 18:48:42Z painter $
56   */
57  public interface RunData extends PipelineData
58  {
59      /**
60       * Gets the parameters.
61       *
62       * @return a parameter parser.
63       */
64      ParameterParser getParameters();
65  
66      /**
67       * Gets the cookies.
68       *
69       * @return a cookie parser.
70       */
71      CookieParser getCookies();
72  
73      /**
74       * Gets the servlet request.
75       *
76       * @return the request.
77       */
78      HttpServletRequest getRequest();
79  
80      /**
81       * Gets the servlet response.
82       *
83       * @return the resposne.
84       */
85      HttpServletResponse getResponse();
86  
87      /**
88       * Gets the servlet session information.
89       *
90       * @return the session.
91       */
92      HttpSession getSession();
93  
94      /**
95       * Gets the servlet configuration used during servlet init.
96       *
97       * @return the configuration.
98       */
99      ServletConfig getServletConfig();
100 
101     /**
102      * Gets the servlet context used during servlet init.
103      *
104      * @return the context.
105      */
106     ServletContext getServletContext();
107 
108     /**
109      * Gets the access control list.
110      *
111      * @return the access control list.
112      *
113      * @param <A> a type extending {@link AccessControlList}
114      */
115     <A extends AccessControlList> A getACL();
116 
117     /**
118      * Sets the access control list.
119      *
120      * @param <A> ACL type
121      * @param acl an access control list.
122      */
123     <A extends AccessControlList> void setACL(A acl);
124 
125     /**
126      * Whether or not an action has been defined.
127      *
128      * @return true if an action has been defined.
129      */
130     boolean hasAction();
131 
132     /**
133      * Gets the action. It returns an empty string if null so
134      * that it is easy to do conditionals on it based on the
135      * equalsIgnoreCase() method.
136      *
137      * @return a string, "" if null.
138      */
139     String getAction();
140 
141     /**
142      * Sets the action for the request.
143      *
144      * @param action a string.
145      */
146     void setAction(String action);
147 
148     /**
149      * If the Layout has not been defined by the screen then set the
150      * layout to be "DefaultLayout".  The screen object can also
151      * override this method to provide intelligent determination of
152      * the Layout to execute.  You can also define that logic here as
153      * well if you want it to apply on a global scale.  For example,
154      * if you wanted to allow someone to define layout "preferences"
155      * where they could dynamically change the layout for the entire
156      * site.
157      *
158      * @return a string.
159      */
160     String getLayout();
161 
162     /**
163      * Set the layout for the request.
164      *
165      * @param layout a string.
166      */
167     void setLayout(String layout);
168 
169     /**
170      * Convenience method for a template info that
171      * returns the layout template being used.
172      *
173      * @return a string.
174      */
175     String getLayoutTemplate();
176 
177     /**
178      * Modifies the layout template for the screen. This convenience
179      * method allows for a layout to be modified from within a
180      * template. For example;
181      *
182      *    $data.setLayoutTemplate("NewLayout.vm")
183      *
184      * @param layout a layout template.
185      */
186     void setLayoutTemplate(String layout);
187 
188     /**
189      * Whether or not a screen has been defined.
190      *
191      * @return true if a screen has been defined.
192      */
193     boolean hasScreen();
194 
195     /**
196      * Gets the screen to execute.
197      *
198      * @return a string.
199      */
200     String getScreen();
201 
202     /**
203      * Sets the screen for the request.
204      *
205      * @param screen a string.
206      */
207     void setScreen(String screen);
208 
209     /**
210      * Convenience method for a template info that
211      * returns the name of the template being used.
212      *
213      * @return a string.
214      */
215     String getScreenTemplate();
216 
217     /**
218      * Sets the screen template for the request. For
219      * example;
220      *
221      *    $data.setScreenTemplate("NewScreen.vm")
222      *
223      * @param screen a screen template.
224      */
225     void setScreenTemplate(String screen);
226 
227     /**
228      * Gets the character encoding to use for reading template files.
229      *
230      * @return the template encoding or null if not specified.
231      */
232     String getTemplateEncoding();
233 
234     /**
235      * Sets the character encoding to use for reading template files.
236      *
237      * @param encoding the template encoding.
238      */
239     void setTemplateEncoding(String encoding);
240 
241     /**
242      * Gets the template info. Creates a new one if needed.
243      *
244      * @return a template info.
245      */
246     TemplateInfo getTemplateInfo();
247 
248     /**
249      * Whether or not a message has been defined.
250      *
251      * @return true if a message has been defined.
252      */
253     boolean hasMessage();
254 
255     /**
256      * Gets the results of an action or another message
257      * to be displayed as a string.
258      *
259      * @return a string.
260      */
261     String getMessage();
262 
263     /**
264      * Sets the message for the request as a string.
265      *
266      * @param msg a string.
267      */
268     void setMessage(String msg);
269 
270     /**
271      * Adds the string to message. If message has prior messages from
272      * other actions or screens, this method can be used to chain them.
273      *
274      * @param msg a string.
275      */
276     void addMessage(String msg);
277 
278     /**
279      * Gets the results of an action or another message
280      * to be displayed as a string.
281      *
282      * @return a string.
283      */
284     String getMessageAsHTML();
285 
286     /**
287      * Unsets the message for the request.
288      */
289     void unsetMessage();
290 
291     /**
292      * Gets a FormMessages object where all the messages to the
293      * user should be stored.
294      *
295      * @return a FormMessages.
296      */
297     FormMessages getMessages();
298 
299     /**
300      * Sets the FormMessages object for the request.
301      *
302      * @param msgs A FormMessages.
303      */
304     void setMessages(FormMessages msgs);
305 
306     /**
307      * Gets the title of the page.
308      *
309      * @return a string.
310      */
311     String getTitle();
312 
313     /**
314      * Sets the title of the page.
315      *
316      * @param title a string.
317      */
318     void setTitle(String title);
319 
320     /**
321      * Checks if a user exists in this session.
322      *
323      * @return true if a user exists in this session.
324      */
325     boolean userExists();
326 
327     /**
328      * Gets the user.
329      *
330      * @param <T> a type extending {@link User}
331      *
332      * @return a user.
333      */
334     <T extends User> T getUser();
335 
336     /**
337      * Sets the user.
338      *
339      * @param user a user.
340      *
341      * @param <T> a type extending {@link User}
342      */
343     <T extends User> void setUser(T user);
344 
345     /**
346      * Attempts to get the user from the session. If it does
347      * not exist, it returns null.
348      *
349      * @return a user.
350      *
351      * @param <T> a type extending {@link User}
352      */
353     <T extends User> T getUserFromSession();
354 
355     /**
356      * Allows one to invalidate the user in the default session.
357      *
358      * @return true if user was invalidated.
359      */
360     boolean removeUserFromSession();
361 
362     /**
363      * Checks to see if out is set.
364      *
365      * @return true if out is set.
366      * @deprecated no replacement planned, response writer will not be cached
367      */
368     @Deprecated
369     boolean isOutSet();
370 
371     /**
372      * Gets the print writer. First time calling this
373      * will set the print writer via the response.
374      *
375      * @return a print writer.
376      * @throws IOException on failure getting the PrintWriter
377      */
378     PrintWriter getOut()
379             throws IOException;
380 
381     /**
382      * Declares that output will be direct to the response stream,
383      * even though getOut() may never be called.  Useful for response
384      * mechanisms that may call res.getWriter() themselves
385      * (such as JSP.)
386      */
387     void declareDirectResponse();
388 
389     /**
390      * Gets the locale. If it has not already been defined with
391      * setLocale(), then  properties named "locale.default.lang"
392      * and "locale.default.country" are checked from the Resource
393      * Service and the corresponding locale is returned. If these
394      * properties are undefined, JVM's default locale is returned.
395      *
396      * @return the locale.
397      */
398     Locale getLocale();
399 
400     /**
401      * Sets the locale.
402      *
403      * @param locale the new locale.
404      */
405     void setLocale(Locale locale);
406 
407     /**
408      * Gets the charset. If it has not already been defined with
409      * setCharSet(), then a property named "locale.default.charset"
410      * is checked from the Resource Service and returned. If this
411      * property is undefined, the default charset of the locale
412      * is returned. If the locale is undefined, null is returned.
413      *
414      * @return the name of the charset or null.
415      */
416     String getCharSet();
417 
418     /**
419      * Sets the charset.
420      *
421      * @param charset the name of the new charset.
422      */
423     void setCharSet(String charset);
424 
425     /**
426      * Gets the HTTP content type to return. If a charset
427      * has been specified, it is included in the content type.
428      * If the charset has not been specified and the main type
429      * of the content type is "text", the default charset is
430      * included. If the default charset is undefined, but the
431      * default locale is defined and it is not the US locale,
432      * a locale specific charset is included.
433      *
434      * @return the content type or an empty string.
435      */
436     String getContentType();
437 
438     /**
439      * Sets the HTTP content type to return.
440      *
441      * @param ct the new content type.
442      */
443     void setContentType(String ct);
444 
445     /**
446      * Gets the redirect URI. If this is set, also make sure to set
447      * the status code to 302.
448      *
449      * @return a string, "" if null.
450      */
451     String getRedirectURI();
452 
453     /**
454      * Sets the redirect uri. If this is set, also make sure to set
455      * the status code to 302.
456      *
457      * @param ruri a string.
458      */
459     void setRedirectURI(String ruri);
460 
461     /**
462      * Gets the HTTP status code to return.
463      *
464      * @return the status.
465      */
466     int getStatusCode();
467 
468     /**
469      * Sets the HTTP status code to return.
470      *
471      * @param sc the status.
472      */
473     void setStatusCode(int sc);
474 
475     /**
476      * Gets an array of system errors.
477      *
478      * @return a SystemError[].
479      */
480     SystemError[] getSystemErrors();
481 
482     /**
483      * Adds a critical system error.
484      *
485      * @param err a system error.
486      */
487     void setSystemError(SystemError err);
488 
489     /**
490      * Gets JNDI Contexts.
491      *
492      * @return a hashtable.
493      */
494     Map<String, Context> getJNDIContexts();
495 
496     /**
497      * Sets JNDI Contexts.
498      *
499      * @param contexts a hashtable.
500      */
501     void setJNDIContexts(Map<String, Context> contexts);
502 
503     /**
504      * Gets the cached server scheme.
505      *
506      * @return a string.
507      */
508     String getServerScheme();
509 
510     /**
511      * Gets the cached server name.
512      *
513      * @return a string.
514      */
515     String getServerName();
516 
517     /**
518      * Gets the cached server port.
519      *
520      * @return an int.
521      */
522     int getServerPort();
523 
524     /**
525      * Gets the cached context path.
526      *
527      * @return a string.
528      */
529     String getContextPath();
530 
531     /**
532      * Gets the cached script name.
533      *
534      * @return a string.
535      */
536     String getScriptName();
537 
538     /**
539      * Gets the server data used by the request.
540      *
541      * @return server data.
542      */
543     ServerData getServerData();
544 
545     /**
546      * Gets the IP address of the client that sent the request.
547      *
548      * @return a string.
549      */
550     String getRemoteAddr();
551 
552     /**
553      * Gets the qualified name of the client that sent the request.
554      *
555      * @return a string.
556      */
557     String getRemoteHost();
558 
559     /**
560      * Get the user agent for the request.
561      *
562      * @return a string.
563      */
564     String getUserAgent();
565 
566     /**
567      * Pulls a user object from the session and increments the access
568      * counter and sets the last access date for the object.
569      */
570     void populate();
571 
572     /**
573      * Saves a user object into the session.
574      */
575     void save();
576 
577     /**
578      * Gets the stack trace if set.
579      *
580      * @return the stack trace.
581      */
582     String getStackTrace();
583 
584     /**
585      * Gets the stack trace exception if set.
586      *
587      * @return the stack exception.
588      */
589     Throwable getStackTraceException();
590 
591     /**
592      * Sets the stack trace.
593      *
594      * @param trace the stack trace.
595      * @param exp the exception.
596      */
597     void setStackTrace(String trace,
598                        Throwable exp);
599 
600     /**
601      * Sets a name/value pair in an internal Map that is accessible from the
602      * Error screen.  This is a good way to get debugging information
603      * when an exception is thrown.
604      *
605      * @param name name of the variable
606      * @param value value of the variable.
607      */
608     void setDebugVariable(String name, Object value);
609 
610     /**
611      * Gets a Map of debug variables.
612      *
613      * @return a Map of debug variables.
614      */
615     Map<String, Object> getDebugVariables();
616 }