    001package org.apache.turbine.util;
    002
    003
    004/*
    005 * Licensed to the Apache Software Foundation (ASF) under one
    006 * or more contributor license agreements.  See the NOTICE file
    007 * distributed with this work for additional information
    008 * regarding copyright ownership.  The ASF licenses this file
    009 * to you under the Apache License, Version 2.0 (the
    010 * "License"); you may not use this file except in compliance
    011 * with the License.  You may obtain a copy of the License at
    012 *
    013 *   http://www.apache.org/licenses/LICENSE-2.0
    014 *
    015 * Unless required by applicable law or agreed to in writing,
    016 * software distributed under the License is distributed on an
    017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    018 * KIND, either express or implied.  See the License for the
    019 * specific language governing permissions and limitations
    020 * under the License.
    021 */
    022
    023
    024import java.io.IOException;
    025import java.io.PrintWriter;
    026import java.util.Locale;
    027import java.util.Map;
    028
    029import javax.naming.Context;
    030import javax.servlet.ServletConfig;
    031import javax.servlet.ServletContext;
    032import javax.servlet.http.HttpServletRequest;
    033import javax.servlet.http.HttpServletResponse;
    034import javax.servlet.http.HttpSession;
    035
    036import org.apache.ecs.Document;
    037import org.apache.ecs.Element;
    038import org.apache.ecs.StringElement;
    039import org.apache.fulcrum.parser.CookieParser;
    040import org.apache.fulcrum.parser.ParameterParser;
    041import org.apache.fulcrum.security.acl.AccessControlList;
    042import org.apache.turbine.om.security.User;
    043import org.apache.turbine.pipeline.PipelineData;
    044import org.apache.turbine.util.template.TemplateInfo;
    045
    046/**
    047 * RunData is an interface to run-time information that is passed
    048 * within Turbine. This provides the threading mechanism for the
    049 * entire system because multiple requests can potentially come in
    050 * at the same time.  Thus, there is only one RunData instance
    051 * for each request that is being serviced.
    052 *
    053 * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
    054 * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
    055 * @author <a href="mailto:bhoeneis@ee.ethz.ch">Bernie Hoeneisen</a>
    056 * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
    057 * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
    058 * @version $Id: RunData.java 1695634 2015-08-13 00:35:47Z tv $
    059 */
    060public interface RunData extends PipelineData
    061{
    062    /**
    063     * Gets the parameters.
    064     *
    065     * @return a parameter parser.
    066     */
    067    ParameterParser getParameters();
    068
    069    /**
    070     * Gets the cookies.
    071     *
    072     * @return a cookie parser.
    073     */
    074    CookieParser getCookies();
    075
    076    /**
    077     * Gets the servlet request.
    078     *
    079     * @return the request.
    080     */
    081    HttpServletRequest getRequest();
    082
    083    /**
    084     * Gets the servlet response.
    085     *
    086     * @return the resposne.
    087     */
    088    HttpServletResponse getResponse();
    089
    090    /**
    091     * Gets the servlet session information.
    092     *
    093     * @return the session.
    094     */
    095    HttpSession getSession();
    096
    097    /**
    098     * Gets the servlet configuration used during servlet init.
    099     *
    100     * @return the configuration.
    101     */
    102    ServletConfig getServletConfig();
    103
    104    /**
    105     * Gets the servlet context used during servlet init.
    106     *
    107     * @return the context.
    108     */
    109    ServletContext getServletContext();
    110
    111    /**
    112     * Gets the access control list.
    113     *
    114     * @return the access control list.
    115     */
    116    <A extends AccessControlList> A getACL();
    117
    118    /**
    119     * Sets the access control list.
    120     *
    121     * @param acl an access control list.
    122     */
    123    void setACL(AccessControlList acl);
    124
    125    /**
    126     * Checks to see if the page is set.
    127     *
    128     * @return true if the page is set.
    129     * @deprecated no replacement planned, ECS is no longer a requirement
    130     */
    131    @Deprecated
    132    boolean isPageSet();
    133
    134    /**
    135     * Gets the page.
    136     *
    137     * @return a document.
    138     * @deprecated no replacement planned, ECS is no longer a requirement
    139     */
    140    @Deprecated
    141    Document getPage();
    142
    143    /**
    144     * Whether or not an action has been defined.
    145     *
    146     * @return true if an action has been defined.
    147     */
    148    boolean hasAction();
    149
    150    /**
    151     * Gets the action. It returns an empty string if null so
    152     * that it is easy to do conditionals on it based on the
    153     * equalsIgnoreCase() method.
    154     *
    155     * @return a string, "" if null.
    156     */
    157    String getAction();
    158
    159    /**
    160     * Sets the action for the request.
    161     *
    162     * @param action a string.
    163     */
    164    void setAction(String action);
    165
    166    /**
    167     * If the Layout has not been defined by the screen then set the
    168     * layout to be "DefaultLayout".  The screen object can also
    169     * override this method to provide intelligent determination of
    170     * the Layout to execute.  You can also define that logic here as
    171     * well if you want it to apply on a global scale.  For example,
    172     * if you wanted to allow someone to define layout "preferences"
    173     * where they could dynamically change the layout for the entire
    174     * site.
    175     *
    176     * @return a string.
    177     */
    178    String getLayout();
    179
    180    /**
    181     * Set the layout for the request.
    182     *
    183     * @param layout a string.
    184     */
    185    void setLayout(String layout);
    186
    187    /**
    188     * Convenience method for a template info that
    189     * returns the layout template being used.
    190     *
    191     * @return a string.
    192     */
    193    String getLayoutTemplate();
    194
    195    /**
    196     * Modifies the layout template for the screen. This convenience
    197     * method allows for a layout to be modified from within a
    198     * template. For example;
    199     *
    200     *    $data.setLayoutTemplate("NewLayout.vm")
    201     *
    202     * @param layout a layout template.
    203     */
    204    void setLayoutTemplate(String layout);
    205
    206    /**
    207     * Whether or not a screen has been defined.
    208     *
    209     * @return true if a screen has been defined.
    210     */
    211    boolean hasScreen();
    212
    213    /**
    214     * Gets the screen to execute.
    215     *
    216     * @return a string.
    217     */
    218    String getScreen();
    219
    220    /**
    221     * Sets the screen for the request.
    222     *
    223     * @param screen a string.
    224     */
    225    void setScreen(String screen);
    226
    227    /**
    228     * Convenience method for a template info that
    229     * returns the name of the template being used.
    230     *
    231     * @return a string.
    232     */
    233    String getScreenTemplate();
    234
    235    /**
    236     * Sets the screen template for the request. For
    237     * example;
    238     *
    239     *    $data.setScreenTemplate("NewScreen.vm")
    240     *
    241     * @param screen a screen template.
    242     */
    243    void setScreenTemplate(String screen);
    244
    245    /**
    246     * Gets the character encoding to use for reading template files.
    247     *
    248     * @return the template encoding or null if not specified.
    249     */
    250    String getTemplateEncoding();
    251
    252    /**
    253     * Sets the character encoding to use for reading template files.
    254     *
    255     * @param encoding the template encoding.
    256     */
    257    void setTemplateEncoding(String encoding);
    258
    259    /**
    260     * Gets the template info. Creates a new one if needed.
    261     *
    262     * @return a template info.
    263     */
    264    TemplateInfo getTemplateInfo();
    265
    266    /**
    267     * Whether or not a message has been defined.
    268     *
    269     * @return true if a message has been defined.
    270     */
    271    boolean hasMessage();
    272
    273    /**
    274     * Gets the results of an action or another message
    275     * to be displayed as a string.
    276     *
    277     * @return a string.
    278     */
    279    String getMessage();
    280
    281    /**
    282     * Sets the message for the request as a string.
    283     *
    284     * @param msg a string.
    285     */
    286    void setMessage(String msg);
    287
    288    /**
    289     * Adds the string to message. If message has prior messages from
    290     * other actions or screens, this method can be used to chain them.
    291     *
    292     * @param msg a string.
    293     */
    294    void addMessage(String msg);
    295
    296    /**
    297     * Gets the results of an action or another message
    298     * to be displayed as an ECS string element.
    299     *
    300     * @return a string element.
    301     */
    302    StringElement getMessageAsHTML();
    303
    304    /**
    305     * Sets the message for the request as an ECS element.
    306     *
    307     * @param msg an element.
    308     */
    309    void setMessage(Element msg);
    310
    311    /**
    312     * Adds the ECS element to message. If message has prior messages from
    313     * other actions or screens, this method can be used to chain them.
    314     *
    315     * @param msg an element.
    316     */
    317    void addMessage(Element msg);
    318
    319    /**
    320     * Unsets the message for the request.
    321     */
    322    void unsetMessage();
    323
    324    /**
    325     * Gets a FormMessages object where all the messages to the
    326     * user should be stored.
    327     *
    328     * @return a FormMessages.
    329     */
    330    FormMessages getMessages();
    331
    332    /**
    333     * Sets the FormMessages object for the request.
    334     *
    335     * @param msgs A FormMessages.
    336     */
    337    void setMessages(FormMessages msgs);
    338
    339    /**
    340     * Gets the title of the page.
    341     *
    342     * @return a string.
    343     */
    344    String getTitle();
    345
    346    /**
    347     * Sets the title of the page.
    348     *
    349     * @param title a string.
    350     */
    351    void setTitle(String title);
    352
    353    /**
    354     * Checks if a user exists in this session.
    355     *
    356     * @return true if a user exists in this session.
    357     */
    358    boolean userExists();
    359
    360    /**
    361     * Gets the user.
    362     *
    363     * @return a user.
    364     */
    365    <T extends User> T getUser();
    366
    367    /**
    368     * Sets the user.
    369     *
    370     * @param user a user.
    371     */
    372    <T extends User> void setUser(T user);
    373
    374    /**
    375     * Attempts to get the user from the session. If it does
    376     * not exist, it returns null.
    377     *
    378     * @return a user.
    379     */
    380    <T extends User> T getUserFromSession();
    381
    382    /**
    383     * Allows one to invalidate the user in the default session.
    384     *
    385     * @return true if user was invalidated.
    386     */
    387    boolean removeUserFromSession();
    388
    389    /**
    390     * Checks to see if out is set.
    391     *
    392     * @return true if out is set.
    393     * @deprecated no replacement planned, response writer will not be cached
    394     */
    395    @Deprecated
    396    boolean isOutSet();
    397
    398    /**
    399     * Gets the print writer. First time calling this
    400     * will set the print writer via the response.
    401     *
    402     * @return a print writer.
    403     * @throws IOException
    404     */
    405    PrintWriter getOut()
    406            throws IOException;
    407
    408    /**
    409     * Declares that output will be direct to the response stream,
    410     * even though getOut() may never be called.  Useful for response
    411     * mechanisms that may call res.getWriter() themselves
    412     * (such as JSP.)
    413     */
    414    void declareDirectResponse();
    415
    416    /**
    417     * Gets the locale. If it has not already been defined with
    418     * setLocale(), then  properties named "locale.default.lang"
    419     * and "locale.default.country" are checked from the Resource
    420     * Service and the corresponding locale is returned. If these
    421     * properties are undefined, JVM's default locale is returned.
    422     *
    423     * @return the locale.
    424     */
    425    Locale getLocale();
    426
    427    /**
    428     * Sets the locale.
    429     *
    430     * @param locale the new locale.
    431     */
    432    void setLocale(Locale locale);
    433
    434    /**
    435     * Gets the charset. If it has not already been defined with
    436     * setCharSet(), then a property named "locale.default.charset"
    437     * is checked from the Resource Service and returned. If this
    438     * property is undefined, the default charset of the locale
    439     * is returned. If the locale is undefined, null is returned.
    440     *
    441     * @return the name of the charset or null.
    442     */
    443    String getCharSet();
    444
    445    /**
    446     * Sets the charset.
    447     *
    448     * @param charset the name of the new charset.
    449     */
    450    void setCharSet(String charset);
    451
    452    /**
    453     * Gets the HTTP content type to return. If a charset
    454     * has been specified, it is included in the content type.
    455     * If the charset has not been specified and the main type
    456     * of the content type is "text", the default charset is
    457     * included. If the default charset is undefined, but the
    458     * default locale is defined and it is not the US locale,
    459     * a locale specific charset is included.
    460     *
    461     * @return the content type or an empty string.
    462     */
    463    String getContentType();
    464
    465    /**
    466     * Sets the HTTP content type to return.
    467     *
    468     * @param ct the new content type.
    469     */
    470    void setContentType(String ct);
    471
    472    /**
    473     * Gets the redirect URI. If this is set, also make sure to set
    474     * the status code to 302.
    475     *
    476     * @return a string, "" if null.
    477     */
    478    String getRedirectURI();
    479
    480    /**
    481     * Sets the redirect uri. If this is set, also make sure to set
    482     * the status code to 302.
    483     *
    484     * @param ruri a string.
    485     */
    486    void setRedirectURI(String ruri);
    487
    488    /**
    489     * Gets the HTTP status code to return.
    490     *
    491     * @return the status.
    492     */
    493    int getStatusCode();
    494
    495    /**
    496     * Sets the HTTP status code to return.
    497     *
    498     * @param sc the status.
    499     */
    500    void setStatusCode(int sc);
    501
    502    /**
    503     * Gets an array of system errors.
    504     *
    505     * @return a SystemError[].
    506     */
    507    SystemError[] getSystemErrors();
    508
    509    /**
    510     * Adds a critical system error.
    511     *
    512     * @param err a system error.
    513     */
    514    void setSystemError(SystemError err);
    515
    516    /**
    517     * Gets JNDI Contexts.
    518     *
    519     * @return a hashtable.
    520     */
    521    Map<String, Context> getJNDIContexts();
    522
    523    /**
    524     * Sets JNDI Contexts.
    525     *
    526     * @param contexts a hashtable.
    527     */
    528    void setJNDIContexts(Map<String, Context> contexts);
    529
    530    /**
    531     * Gets the cached server scheme.
    532     *
    533     * @return a string.
    534     */
    535    String getServerScheme();
    536
    537    /**
    538     * Gets the cached server name.
    539     *
    540     * @return a string.
    541     */
    542    String getServerName();
    543
    544    /**
    545     * Gets the cached server port.
    546     *
    547     * @return an int.
    548     */
    549    int getServerPort();
    550
    551    /**
    552     * Gets the cached context path.
    553     *
    554     * @return a string.
    555     */
    556    String getContextPath();
    557
    558    /**
    559     * Gets the cached script name.
    560     *
    561     * @return a string.
    562     */
    563    String getScriptName();
    564
    565    /**
    566     * Gets the server data used by the request.
    567     *
    568     * @return server data.
    569     */
    570    ServerData getServerData();
    571
    572    /**
    573     * Gets the IP address of the client that sent the request.
    574     *
    575     * @return a string.
    576     */
    577    String getRemoteAddr();
    578
    579    /**
    580     * Gets the qualified name of the client that sent the request.
    581     *
    582     * @return a string.
    583     */
    584    String getRemoteHost();
    585
    586    /**
    587     * Get the user agent for the request.
    588     *
    589     * @return a string.
    590     */
    591    String getUserAgent();
    592
    593    /**
    594     * Pulls a user object from the session and increments the access
    595     * counter and sets the last access date for the object.
    596     */
    597    void populate();
    598
    599    /**
    600     * Saves a user object into the session.
    601     */
    602    void save();
    603
    604    /**
    605     * Gets the stack trace if set.
    606     *
    607     * @return the stack trace.
    608     */
    609    String getStackTrace();
    610
    611    /**
    612     * Gets the stack trace exception if set.
    613     *
    614     * @return the stack exception.
    615     */
    616    Throwable getStackTraceException();
    617
    618    /**
    619     * Sets the stack trace.
    620     *
    621     * @param trace the stack trace.
    622     * @param exp the exception.
    623     */
    624    void setStackTrace(String trace,
    625                       Throwable exp);
    626
    627    /**
    628     * Sets a name/value pair in an internal Map that is accessible from the
    629     * Error screen.  This is a good way to get debugging information
    630     * when an exception is thrown.
    631     *
    632     * @param name name of the variable
    633     * @param value value of the variable.
    634     */
    635    void setDebugVariable(String name, Object value);
    636
    637    /**
    638     * Gets a Map of debug variables.
    639     *
    640     * @return a Map of debug variables.
    641     */
    642    Map<String, Object> getDebugVariables();
    643}