blob: a3f245c051cfcc3d523906e8af70fe505fe6522a [file] [log] [blame]
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Pluto", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* ====================================================================
*
* This source code implements specifications defined by the Java
* Community Process. In order to remain compliant with the specification
* DO NOT add / change / or delete method signatures!
*/
package javax.portlet;
/**
* The <CODE>PortletRequest</CODE> defines the base interface to provide client
* request information to a portlet. The portlet container uses two specialized
* versions of this interface when invoking a portlet, <CODE>ActionRequest</CODE>
* and <CODE>RenderRequest</CODE>. The portlet container creates these objects and
* passes them as arguments to the portlet's <CODE>processAction</CODE> and
* <CODE>render</CODE> methods.
*
* @see ActionRequest
* @see RenderRequest
*/
public interface PortletRequest
{
/** Used to retrieve user information attributes with the
* <code>getAttribute</code> call. The user information is returned
* as a <code>Map</code> object. The portlet must define the
* user information attribute it is interested in inside the
* <code>user-attribute</code> section of the deployment descriptor.
* If an attribute is not supported
* by the current runtime system it will not show up in the user
* attribute map.<BR>
* If the user-attribute is supported by the runtime system, but not
* defined for a particular user, then for that user the attribute
* exists in the returned map and the attribute has a <code>null</code> value.
* <p>
* If the user-attribute is not defined for the current user it
* will not show up in the Map.
* <p>
* The value is <code>javax.portlet.userinfo</code>.
*/
public static final String USER_INFO = "javax.portlet.userinfo";
/**
* String identifier for Basic authentication. Value "BASIC".
*/
public static final String BASIC_AUTH = "BASIC";
/**
* String identifier for Form based authentication. Value "FORM".
*/
public static final String FORM_AUTH = "FORM";
/**
* String identifier for Certification based authentication. Value "CLIENT_CERT".
*/
public static final String CLIENT_CERT_AUTH = "CLIENT_CERT";
/**
* String identifier for Digest based authentication. Value "DIGEST".
*/
public static final String DIGEST_AUTH = "DIGEST";
/**
* Returns true, if the given window state is valid
* to be set for this portlet in the context
* of the current request.
*
* @param state window state to checked
*
* @return true, if it is valid for this portlet
* in this request to change to the
* given window state
*
*/
public boolean isWindowStateAllowed(WindowState state);
/**
* Returns true, if the given portlet mode is a valid
* one to set for this portlet in the context
* of the current request.
*
* @param mode portlet mode to check
*
* @return true, if it is valid for this portlet
* in this request to change to the
* given portlet mode
*
*/
public boolean isPortletModeAllowed(PortletMode mode);
/**
* Returns the current portlet mode of the portlet.
*
* @return the portlet mode
*/
public PortletMode getPortletMode ();
/**
* Returns the current window state of the portlet.
*
* @return the window state
*/
public WindowState getWindowState ();
/**
* Returns the preferences object associated with the portlet.
*
* @return the portlet preferences
*/
public PortletPreferences getPreferences ();
/**
* Returns the current portlet session or, if there is no current session,
* creates one and returns the new session.
* <p>
* Creating a new portlet session will result in creating
* a new <code>HttpSession</code> on which the portlet session is based on.
*
* @return the portlet session
*/
public PortletSession getPortletSession ();
/**
* Returns the current portlet session or, if there is no current session
* and the given flag is <CODE>true</CODE>, creates one and returns
* the new session.
* <P>
* If the given flag is <CODE>false</CODE> and there is no current
* portlet session, this method returns <CODE>null</CODE>.
* <p>
* Creating a new portlet session will result in creating
* a new <code>HttpSession</code> on which the portlet session is based on.
*
* @param create
* <CODE>true</CODE> to create a new session, <BR>
* <CODE>false</CODE> to return <CODE>null</CODE> if there
* is no current session
* @return the portlet session
*/
public PortletSession getPortletSession (boolean create);
/**
* Returns the value of the specified request property
* as a <code>String</code>. If the request did not include a property
* of the specified name, this method returns <code>null</code>.
* <p>
* A portlet can access portal/portlet-container specific properties
* through this method and, if available, the
* headers of the HTTP client request.
* <p>
* This method should only be used if the
* property has only one value. If the property might have
* more than one value, use {@link #getProperties}.
* <p>
* If this method is used with a multivalued
* parameter, the value returned is equal to the first value
* in the Enumeration returned by <code>getProperties</code>.
*
* @param name a <code>String</code> specifying the
* property name
*
* @return a <code>String</code> containing the
* value of the requested
* property, or <code>null</code>
* if the request does not
* have a property of that name.
*
* @exception java.lang.IllegalArgumentException
* if name is <code>null</code>.
*/
public String getProperty(String name);
/**
* Returns all the values of the specified request property
* as a <code>Enumeration</code> of <code>String</code> objects.
* <p>
* If the request did not include any propertys
* of the specified name, this method returns an empty
* <code>Enumeration</code>.
* The property name is case insensitive. You can use
* this method with any request property.
*
* @param name a <code>String</code> specifying the
* property name
*
* @return a <code>Enumeration</code> containing
* the values of the requested property. If
* the request does not have any properties of
* that name return an empty <code>Enumeration</code>.
*
* @exception java.lang.IllegalArgumentException
* if name is <code>null</code>.
*/
public java.util.Enumeration getProperties(String name);
/**
*
* Returns a <code>Enumeration</code> of all the property names
* this request contains. If the request has no
* properties, this method returns an empty <code>Enumeration</code>.
*
*
* @return an <code>Enumeration</code> of all the
* property names sent with this
* request; if the request has
* no properties, an empty <code>Enumeration</code>.
*/
public java.util.Enumeration getPropertyNames();
/**
* Returns the context of the calling portal.
*
* @return the context of the calling portal
*/
public PortalContext getPortalContext();
/**
* Returns the name of the authentication scheme used for the
* connection between client and portal,
* for example, <code>BASIC_AUTH</code>, <code>CLIENT_CERT_AUTH</code>,
* a custom one or <code>null</code> if there was no authentication.
*
* @return one of the static members <code>BASIC_AUTH</code>,
* <code>FORM_AUTH</code>, <code>CLIENT_CERT_AUTH</code>,
* <code>DIGEST_AUTH</code> (suitable for == comparison)
* indicating the authentication scheme,
* a custom one, or
* <code>null</code> if the request was
* not authenticated.
*/
public java.lang.String getAuthType();
/**
* Returns the context path which is the path prefix associated with the deployed
* portlet application. If the portlet application is rooted at the
* base of the web server URL namespace (also known as "default" context),
* this path must be an empty string. Otherwise, it must be the path the
* portlet application is rooted to, the path must start with a '/' and
* it must not end with a '/' character.
* <p>
* To encode a URL the {@link PortletResponse#encodeURL} method must be used.
*
* @return a <code>String</code> specifying the
* portion of the request URL that indicates the context
* of the request
*
* @see PortletResponse#encodeURL
*/
public String getContextPath();
/**
* Returns the login of the user making this request, if the user
* has been authenticated, or null if the user has not been authenticated.
*
* @return a <code>String</code> specifying the login
* of the user making this request, or <code>null</code>
* if the user login is not known.
*
*/
public java.lang.String getRemoteUser();
/**
* Returns a java.security.Principal object containing the name of the
* current authenticated user.
*
* @return a <code>java.security.Principal</code> containing
* the name of the user making this request, or
* <code>null</code> if the user has not been
* authenticated.
*/
public java.security.Principal getUserPrincipal();
/**
* Returns a boolean indicating whether the authenticated user is
* included in the specified logical "role". Roles and role membership can be
* defined using deployment descriptors. If the user has not been
* authenticated, the method returns <code>false</code>.
*
* @param role a <code>String</code> specifying the name
* of the role
*
* @return a <code>boolean</code> indicating whether
* the user making this request belongs to a given role;
* <code>false</code> if the user has not been
* authenticated.
*/
public boolean isUserInRole(java.lang.String role);
/**
*
* Returns the value of the named attribute as an <code>Object</code>,
* or <code>null</code> if no attribute of the given name exists.
* <p>
* Attribute names should follow the same conventions as package
* names. This specification reserves names matching <code>java.*</code>,
* and <code>javax.*</code>.
* <p>
* In a distributed portlet web application the <code>Object</code>
* needs to be serializable.
*
* @param name a <code>String</code> specifying the name of
* the attribute
*
* @return an <code>Object</code> containing the value
* of the attribute, or <code>null</code> if
* the attribute does not exist.
*
* @exception java.lang.IllegalArgumentException
* if name is <code>null</code>.
*
*/
public Object getAttribute(String name);
/**
* Returns an <code>Enumeration</code> containing the
* names of the attributes available to this request.
* This method returns an empty <code>Enumeration</code>
* if the request has no attributes available to it.
*
*
* @return an <code>Enumeration</code> of strings
* containing the names
* of the request attributes, or an empty
* <code>Enumeration</code> if the request
* has no attributes available to it.
*/
public java.util.Enumeration getAttributeNames();
/**
* Returns the value of a request parameter as a <code>String</code>,
* or <code>null</code> if the parameter does not exist. Request parameters
* are extra information sent with the request. The returned parameter
* are "x-www-form-urlencoded" decoded.
* <p>
* Only parameters targeted to the current portlet are accessible.
* <p>
* This method should only be used if the
* parameter has only one value. If the parameter might have
* more than one value, use {@link #getParameterValues}.
* <p>
* If this method is used with a multivalued
* parameter, the value returned is equal to the first value
* in the array returned by <code>getParameterValues</code>.
*
*
*
* @param name a <code>String</code> specifying the
* name of the parameter
*
* @return a <code>String</code> representing the
* single value of the parameter
*
* @see #getParameterValues
*
* @exception java.lang.IllegalArgumentException
* if name is <code>null</code>.
*
*/
public String getParameter(String name);
/**
*
* Returns an <code>Enumeration</code> of <code>String</code>
* objects containing the names of the parameters contained
* in this request. If the request has
* no parameters, the method returns an
* empty <code>Enumeration</code>.
* <p>
* Only parameters targeted to the current portlet are returned.
*
*
* @return an <code>Enumeration</code> of <code>String</code>
* objects, each <code>String</code> containing
* the name of a request parameter; or an
* empty <code>Enumeration</code> if the
* request has no parameters.
*/
public java.util.Enumeration getParameterNames();
/**
* Returns an array of <code>String</code> objects containing
* all of the values the given request parameter has, or
* <code>null</code> if the parameter does not exist.
* The returned parameters are "x-www-form-urlencoded" decoded.
* <p>
* If the parameter has a single value, the array has a length
* of 1.
*
*
* @param name a <code>String</code> containing the name of
* the parameter the value of which is requested
*
* @return an array of <code>String</code> objects
* containing the parameter values.
*
* @see #getParameter
*
* @exception java.lang.IllegalArgumentException
* if name is <code>null</code>.
*
*/
public String[] getParameterValues(String name);
/**
* Returns a <code>Map</code> of the parameters of this request.
* Request parameters are extra information sent with the request.
* The returned parameters are "x-www-form-urlencoded" decoded.
* <p>
* The values in the returned <code>Map</code> are from type
* String array (<code>String[]</code>).
* <p>
* If no parameters exist this method returns an empty <code>Map</code>.
*
* @return an immutable <code>Map</code> containing parameter names as
* keys and parameter values as map values, or an empty <code>Map</code>
* if no parameters exist. The keys in the parameter
* map are of type String. The values in the parameter map are of type
* String array (<code>String[]</code>).
*/
public java.util.Map getParameterMap();
/**
* Returns a boolean indicating whether this request was made
* using a secure channel between client and the portal, such as HTTPS.
*
* @return true, if the request was made using a secure channel.
*/
public boolean isSecure();
/**
* Stores an attribute in this request.
*
* <p>Attribute names should follow the same conventions as
* package names. Names beginning with <code>java.*</code>,
* <code>javax.*</code>, and <code>com.sun.*</code> are
* reserved for use by Sun Microsystems.
*<br> If the value passed into this method is <code>null</code>,
* the effect is the same as calling {@link #removeAttribute}.
*
*
* @param name a <code>String</code> specifying
* the name of the attribute
*
* @param o the <code>Object</code> to be stored
*
*
* @exception java.lang.IllegalArgumentException
* if name is <code>null</code>.
*/
public void setAttribute(String name, Object o);
/**
*
* Removes an attribute from this request. This method is not
* generally needed, as attributes only persist as long as the request
* is being handled.
*
* <p>Attribute names should follow the same conventions as
* package names. Names beginning with <code>java.*</code>,
* <code>javax.*</code>, and <code>com.sun.*</code> are
* reserved for use by Sun Microsystems.
*
* @param name a <code>String</code> specifying
* the name of the attribute to be removed
*
*
* @exception java.lang.IllegalArgumentException
* if name is <code>null</code>.
*/
public void removeAttribute(String name);
/**
*
* Returns the session ID indicated in the client request.
* This session ID may not be a valid one, it may be an old
* one that has expired or has been invalidated.
* If the client request
* did not specify a session ID, this method returns
* <code>null</code>.
*
* @return a <code>String</code> specifying the session
* ID, or <code>null</code> if the request did
* not specify a session ID
*
* @see #isRequestedSessionIdValid
*
*/
public String getRequestedSessionId();
/**
*
* Checks whether the requested session ID is still valid.
*
* @return <code>true</code> if this
* request has an id for a valid session
* in the current session context;
* <code>false</code> otherwise
*
* @see #getRequestedSessionId
* @see #getPortletSession
*/
public boolean isRequestedSessionIdValid();
/**
* Returns the portal preferred content type for the response.
* <p>
* The content type only includes the MIME type, not the
* character set.
* <p>
* Only content types that the portlet has defined in its
* deployment descriptor are valid return values for
* this method call. If the portlet has defined
* <code>'*'</code> or <code>'* / *'</code> as supported content
* types, these may also be valid return values.
*
* @return preferred MIME type of the response
*/
public String getResponseContentType();
/**
* Gets a list of content types which the portal accepts for the response.
* This list is ordered with the most preferable types listed first.
* <p>
* The content type only includes the MIME type, not the
* character set.
* <p>
* Only content types that the portlet has defined in its
* deployment descriptor are valid return values for
* this method call. If the portlet has defined
* <code>'*'</code> or <code>'* / *'</code> as supported content
* types, these may also be valid return values.
*
* @return ordered list of MIME types for the response
*/
public java.util.Enumeration getResponseContentTypes();
/**
* Returns the preferred Locale in which the portal will accept content.
* The Locale may be based on the Accept-Language header of the client.
*
* @return the prefered Locale in which the portal will accept content.
*/
public java.util.Locale getLocale();
/**
* Returns an Enumeration of Locale objects indicating, in decreasing
* order starting with the preferred locale in which the portal will
* accept content for this request.
* The Locales may be based on the Accept-Language header of the client.
*
* @return an Enumeration of Locales, in decreasing order, in which
* the portal will accept content for this request
*/
public java.util.Enumeration getLocales();
/**
* Returns the name of the scheme used to make this request.
* For example, <code>http</code>, <code>https</code>, or <code>ftp</code>.
* Different schemes have different rules for constructing URLs,
* as noted in RFC 1738.
*
* @return a <code>String</code> containing the name
* of the scheme used to make this request
*/
public String getScheme();
/**
* Returns the host name of the server that received the request.
*
* @return a <code>String</code> containing the name
* of the server to which the request was sent
*/
public String getServerName();
/**
* Returns the port number on which this request was received.
*
* @return an integer specifying the port number
*/
public int getServerPort();
}