/*
* Copyright 2011 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.terminal;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Locale;
import java.util.Map;
import javax.portlet.PortletRequest;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import com.vaadin.Application;
import com.vaadin.RootRequiresMoreInformationException;
import com.vaadin.annotations.EagerInit;
import com.vaadin.terminal.gwt.server.WebBrowser;
import com.vaadin.ui.Root;
/**
* A generic request to the server, wrapping a more specific request type, e.g.
* HttpServletReqest or PortletRequest.
*
* @since 7.0
*/
public interface WrappedRequest extends Serializable {
/**
* Detailed information extracted from the browser.
*
* @see WrappedRequest#getBrowserDetails()
*/
public interface BrowserDetails extends Serializable {
/**
* Gets the URI hash fragment for the request. This is typically used to
* encode navigation within an application.
*
* @return the URI hash fragment
*/
public String getUriFragment();
/**
* Gets the value of window.name from the browser. This can be used to
* keep track of the specific window between browser reloads.
*
* @return the string value of window.name in the browser
*/
public String getWindowName();
/**
* Gets a reference to the {@link WebBrowser} object containing
* additional information, e.g. screen size and the time zone offset.
*
* @return the web browser object
*/
public WebBrowser getWebBrowser();
}
/**
* Gets the named request parameter This is typically a HTTP GET or POST
* parameter, though other request types might have other ways of
* representing parameters.
*
* @see javax.servlet.ServletRequest#getParameter(String)
* @see javax.portlet.PortletRequest#getParameter(String)
*
* @param parameter
* the name of the parameter
* @return The paramter value, or null
if no parameter with the
* given name is present
*/
public String getParameter(String parameter);
/**
* Gets all the parameters of the request.
*
* @see #getParameter(String)
*
* @see javax.servlet.ServletRequest#getParameterMap()
* @see javax.portlet.PortletRequest#getParameter(String)
*
* @return A mapping of parameter names to arrays of parameter values
*/
public Map getParameterMap();
/**
* Returns the length of the request content that can be read from the input
* stream returned by {@link #getInputStream()}.
*
* @see javax.servlet.ServletRequest#getContentLength()
* @see javax.portlet.ClientDataRequest#getContentLength()
*
* @return content length in bytes
*/
public int getContentLength();
/**
* Returns an input stream from which the request content can be read. The
* request content length can be obtained with {@link #getContentLength()}
* without reading the full stream contents.
*
* @see javax.servlet.ServletRequest#getInputStream()
* @see javax.portlet.ClientDataRequest#getPortletInputStream()
*
* @return the input stream from which the contents of the request can be
* read
* @throws IOException
* if the input stream can not be opened
*/
public InputStream getInputStream() throws IOException;
/**
* Gets a request attribute.
*
* @param name
* the name of the attribute
* @return the value of the attribute, or null
if there is no
* attribute with the given name
*
* @see javax.servlet.ServletRequest#getAttribute(String)
* @see javax.portlet.PortletRequest#getAttribute(String)
*/
public Object getAttribute(String name);
/**
* Defines a request attribute.
*
* @param name
* the name of the attribute
* @param value
* the attribute value
*
* @see javax.servlet.ServletRequest#setAttribute(String, Object)
* @see javax.portlet.PortletRequest#setAttribute(String, Object)
*/
public void setAttribute(String name, Object value);
/**
* Gets the path of the requested resource relative to the application. The
* path be null
if no path information is available. Does
* always start with / if the path isn't null
.
*
* @return a string with the path relative to the application.
*
* @see javax.servlet.http.HttpServletRequest#getPathInfo()
*/
public String getRequestPathInfo();
/**
* Returns the maximum time interval, in seconds, that the session
* associated with this request will be kept open between client accesses.
*
* @return an integer specifying the number of seconds the session
* associated with this request remains open between client requests
*
* @see javax.servlet.http.HttpSession#getMaxInactiveInterval()
* @see javax.portlet.PortletSession#getMaxInactiveInterval()
*/
public int getSessionMaxInactiveInterval();
/**
* Gets an attribute from the session associated with this request.
*
* @param name
* the name of the attribute
* @return the attribute value, or null
if the attribute is not
* defined in the session
*
* @see javax.servlet.http.HttpSession#getAttribute(String)
* @see javax.portlet.PortletSession#getAttribute(String)
*/
public Object getSessionAttribute(String name);
/**
* Saves an attribute value in the session associated with this request.
*
* @param name
* the name of the attribute
* @param attribute
* the attribute value
*
* @see javax.servlet.http.HttpSession#setAttribute(String, Object)
* @see javax.portlet.PortletSession#setAttribute(String, Object)
*/
public void setSessionAttribute(String name, Object attribute);
/**
* Returns the MIME type of the body of the request, or null if the type is
* not known.
*
* @return a string containing the name of the MIME type of the request, or
* null if the type is not known
*
* @see javax.servlet.ServletRequest#getContentType()
* @see javax.portlet.ResourceRequest#getContentType()
*
*/
public String getContentType();
/**
* Gets detailed information about the browser from which the request
* originated. This consists of information that is not available from
* normal HTTP requests, but requires additional information to be extracted
* for instance using javascript in the browser.
*
* This information is only guaranteed to be available in some special
* cases, for instance when {@link Application#getRoot} is called again
* after throwing {@link RootRequiresMoreInformationException} or in
* {@link Root#init(WrappedRequest)} for a Root class not annotated with
* {@link EagerInit}
*
* @return the browser details, or null
if details are not
* available
*
* @see BrowserDetails
*/
public BrowserDetails getBrowserDetails();
/**
* Gets locale information from the query, e.g. using the Accept-Language
* header.
*
* @return the preferred Locale
*
* @see ServletRequest#getLocale()
* @see PortletRequest#getLocale()
*/
public Locale getLocale();
/**
* Returns the IP address from which the request came. This might also be
* the address of a proxy between the server and the original requester.
*
* @return a string containing the IP address, or null
if the
* address is not available
*
* @see ServletRequest#getRemoteAddr()
*/
public String getRemoteAddr();
/**
* Checks whether the request was made using a secure channel, e.g. using
* https.
*
* @return a boolean indicating if the request is secure
*
* @see ServletRequest#isSecure()
* @see PortletRequest#isSecure()
*/
public boolean isSecure();
/**
* Gets the value of a request header, e.g. a http header for a
* {@link HttpServletRequest}.
*
* @param headerName
* the name of the header
* @return the header value, or null
if the header is not
* present in the request
*
* @see HttpServletRequest#getHeader(String)
*/
public String getHeader(String headerName);
/**
* Gets the deployment configuration for the context of this request.
*
* @return the deployment configuration
*
* @see DeploymentConfiguration
*/
public DeploymentConfiguration getDeploymentConfiguration();
}