123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- /*
- @ITMillApache2LicenseForJavaFiles@
- */
-
- package com.vaadin.terminal.gwt.server;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
-
- import com.vaadin.Application;
- import com.vaadin.external.org.apache.commons.fileupload.FileItemIterator;
- import com.vaadin.external.org.apache.commons.fileupload.FileUpload;
- import com.vaadin.external.org.apache.commons.fileupload.FileUploadException;
- import com.vaadin.external.org.apache.commons.fileupload.servlet.ServletFileUpload;
- import com.vaadin.terminal.ApplicationResource;
- import com.vaadin.terminal.DownloadStream;
- import com.vaadin.ui.Window;
-
- /**
- * Application manager processes changes and paints for single application
- * instance.
- *
- * This class handles applications running as servlets.
- *
- * @see AbstractCommunicationManager
- *
- * @author IT Mill Ltd.
- * @version
- * @VERSION@
- * @since 5.0
- */
- @SuppressWarnings("serial")
- public class CommunicationManager extends AbstractCommunicationManager {
-
- /**
- * Concrete wrapper class for {@link HttpServletRequest}.
- *
- * @see Request
- */
- private static class HttpServletRequestWrapper implements Request {
-
- private final HttpServletRequest request;
-
- public HttpServletRequestWrapper(HttpServletRequest request) {
- this.request = request;
- }
-
- public Object getAttribute(String name) {
- return request.getAttribute(name);
- }
-
- public int getContentLength() {
- return request.getContentLength();
- }
-
- public InputStream getInputStream() throws IOException {
- return request.getInputStream();
- }
-
- public String getParameter(String name) {
- return request.getParameter(name);
- }
-
- public String getRequestID() {
- return "RequestURL:" + request.getRequestURI();
- }
-
- public Session getSession() {
- return new HttpSessionWrapper(request.getSession());
- }
-
- public Object getWrappedRequest() {
- return request;
- }
-
- public boolean isRunningInPortlet() {
- return false;
- }
-
- public void setAttribute(String name, Object o) {
- request.setAttribute(name, o);
- }
- }
-
- /**
- * Concrete wrapper class for {@link HttpServletResponse}.
- *
- * @see Response
- */
- private static class HttpServletResponseWrapper implements Response {
-
- private final HttpServletResponse response;
-
- public HttpServletResponseWrapper(HttpServletResponse response) {
- this.response = response;
- }
-
- public OutputStream getOutputStream() throws IOException {
- return response.getOutputStream();
- }
-
- public Object getWrappedResponse() {
- return response;
- }
-
- public void setContentType(String type) {
- response.setContentType(type);
- }
-
- }
-
- /**
- * Concrete wrapper class for {@link HttpSession}.
- *
- * @see Session
- */
- private static class HttpSessionWrapper implements Session {
-
- private final HttpSession session;
-
- public HttpSessionWrapper(HttpSession session) {
- this.session = session;
- }
-
- public Object getAttribute(String name) {
- return session.getAttribute(name);
- }
-
- public int getMaxInactiveInterval() {
- return session.getMaxInactiveInterval();
- }
-
- public Object getWrappedSession() {
- return session;
- }
-
- public boolean isNew() {
- return session.isNew();
- }
-
- public void setAttribute(String name, Object o) {
- session.setAttribute(name, o);
- }
-
- }
-
- private static class AbstractApplicationServletWrapper implements Callback {
-
- private final AbstractApplicationServlet servlet;
-
- public AbstractApplicationServletWrapper(
- AbstractApplicationServlet servlet) {
- this.servlet = servlet;
- }
-
- public void criticalNotification(Request request, Response response,
- String cap, String msg, String details, String outOfSyncURL)
- throws IOException {
- servlet.criticalNotification(
- (HttpServletRequest) request.getWrappedRequest(),
- (HttpServletResponse) response.getWrappedResponse(), cap,
- msg, details, outOfSyncURL);
- }
-
- public String getRequestPathInfo(Request request) {
- return servlet.getRequestPathInfo((HttpServletRequest) request
- .getWrappedRequest());
- }
-
- public InputStream getThemeResourceAsStream(String themeName,
- String resource) throws IOException {
- return servlet.getServletContext().getResourceAsStream(
- "/" + AbstractApplicationServlet.THEME_DIRECTORY_PATH
- + themeName + "/" + resource);
- }
-
- }
-
- /**
- * @deprecated use {@link #CommunicationManager(Application)} instead
- * @param application
- * @param applicationServlet
- */
- @Deprecated
- public CommunicationManager(Application application,
- AbstractApplicationServlet applicationServlet) {
- super(application);
- }
-
- /**
- * TODO New constructor - document me!
- *
- * @param application
- */
- public CommunicationManager(Application application) {
- super(application);
- }
-
- @Override
- protected FileUpload createFileUpload() {
- return new ServletFileUpload();
- }
-
- @Override
- protected FileItemIterator getUploadItemIterator(FileUpload upload,
- Request request) throws IOException, FileUploadException {
- return ((ServletFileUpload) upload)
- .getItemIterator((HttpServletRequest) request
- .getWrappedRequest());
- }
-
- /**
- * Handles file upload request submitted via Upload component.
- *
- * TODO document
- *
- * @param request
- * @param response
- * @throws IOException
- * @throws FileUploadException
- */
- public void handleFileUpload(HttpServletRequest request,
- HttpServletResponse response) throws IOException,
- FileUploadException {
- doHandleFileUpload(new HttpServletRequestWrapper(request),
- new HttpServletResponseWrapper(response));
- }
-
- /**
- * Handles UIDL request
- *
- * TODO document
- *
- * @param request
- * @param response
- * @param applicationServlet
- * @param window
- * target window of the UIDL request, can be null if window not
- * found
- * @throws IOException
- * @throws ServletException
- */
- public void handleUidlRequest(HttpServletRequest request,
- HttpServletResponse response,
- AbstractApplicationServlet applicationServlet, Window window)
- throws IOException, ServletException,
- InvalidUIDLSecurityKeyException {
- doHandleUidlRequest(new HttpServletRequestWrapper(request),
- new HttpServletResponseWrapper(response),
- new AbstractApplicationServletWrapper(applicationServlet),
- window);
- }
-
- /**
- * Gets the existing application or creates a new one. Get a window within
- * an application based on the requested URI.
- *
- * @param request
- * the HTTP Request.
- * @param application
- * the Application to query for window.
- * @param assumedWindow
- * if the window has been already resolved once, this parameter
- * must contain the window.
- * @return Window matching the given URI or null if not found.
- * @throws ServletException
- * if an exception has occurred that interferes with the
- * servlet's normal operation.
- */
- Window getApplicationWindow(HttpServletRequest request,
- AbstractApplicationServlet applicationServlet,
- Application application, Window assumedWindow)
- throws ServletException {
- return doGetApplicationWindow(new HttpServletRequestWrapper(request),
- new AbstractApplicationServletWrapper(applicationServlet),
- application, assumedWindow);
- }
-
- /**
- * Calls the Window URI handler for a request and returns the
- * {@link DownloadStream} returned by the handler.
- *
- * If the window is the main window of an application, the deprecated
- * {@link Application#handleURI(java.net.URL, String)} is called first to
- * handle {@link ApplicationResource}s and the window handler is only called
- * if it returns null.
- *
- * @see AbstractCommunicationManager#handleURI(Window, Request, Response,
- * Callback)
- *
- * @param window
- * @param request
- * @param response
- * @param applicationServlet
- * @return
- */
- DownloadStream handleURI(Window window, HttpServletRequest request,
- HttpServletResponse response,
- AbstractApplicationServlet applicationServlet) {
- return handleURI(window, new HttpServletRequestWrapper(request),
- new HttpServletResponseWrapper(response),
- new AbstractApplicationServletWrapper(applicationServlet));
- }
-
- }
|