summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2011-12-12 14:57:08 +0200
committerLeif Åstrand <leif@vaadin.com>2011-12-14 16:57:52 +0200
commitf9e8be7a90b2f5ea463799ec1d9cb417cb96748d (patch)
treed2b82c5ebfad4b6bbb6e8a84b1320e55a3fabc60 /src
parentda7f451c58cc2c9db7a04dc94571a90beca9f7dc (diff)
downloadvaadin-framework-f9e8be7a90b2f5ea463799ec1d9cb417cb96748d.tar.gz
vaadin-framework-f9e8be7a90b2f5ea463799ec1d9cb417cb96748d.zip
Refactor to use different WrappedRequests for Portal specific hacks
Also move the code for updating WebBrowser to that class instead of the duplicated code for Servlet and Portlet.
Diffstat (limited to 'src')
-rw-r--r--src/com/vaadin/terminal/CombinedRequest.java37
-rw-r--r--src/com/vaadin/terminal/WrappedRequest.java9
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java387
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java19
-rw-r--r--src/com/vaadin/terminal/gwt/server/WebBrowser.java35
-rw-r--r--src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java21
-rw-r--r--src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java66
7 files changed, 287 insertions, 287 deletions
diff --git a/src/com/vaadin/terminal/CombinedRequest.java b/src/com/vaadin/terminal/CombinedRequest.java
index 35c2f2cd90..1eeb5aba90 100644
--- a/src/com/vaadin/terminal/CombinedRequest.java
+++ b/src/com/vaadin/terminal/CombinedRequest.java
@@ -7,11 +7,12 @@ package com.vaadin.terminal;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
+import java.util.Locale;
import java.util.Map;
/**
* A {@link WrappedRequest} with path and parameters from one request and
- * {@link BrowserDetails} extracted from another request.
+ * {@link WrappedRequest.BrowserDetails} extracted from another request.
*
* This class is intended to be used for a two request initialization where the
* first request fetches the actual application page and the second request
@@ -24,6 +25,18 @@ public class CombinedRequest implements WrappedRequest {
private final Map<String, String[]> parameterMap;
private final String pathInfo;
+ /**
+ * Creates a new combined request based on the second request and some
+ * details from the first request.
+ *
+ * @param secondRequest
+ * the second request which will be used as the foundation of the
+ * combined request
+ * @param parameterMap
+ * the parameter map from the first request
+ * @param pathInfo
+ * the path info from string the first request
+ */
public CombinedRequest(WrappedRequest secondRequest,
Map<String, String[]> parameterMap, String pathInfo) {
this.secondRequest = secondRequest;
@@ -102,7 +115,29 @@ public class CombinedRequest implements WrappedRequest {
};
}
+ /**
+ * Gets the original second request. This can be used e.g. if a request
+ * parameter from the second request is required.
+ *
+ * @return the original second wrapped request
+ */
public WrappedRequest getSecondRequest() {
return secondRequest;
}
+
+ public Locale getLocale() {
+ return secondRequest.getLocale();
+ }
+
+ public String getRemoteAddr() {
+ return secondRequest.getRemoteAddr();
+ }
+
+ public boolean isSecure() {
+ return secondRequest.isSecure();
+ }
+
+ public String getHeader(String name) {
+ return secondRequest.getHeader(name);
+ }
}
diff --git a/src/com/vaadin/terminal/WrappedRequest.java b/src/com/vaadin/terminal/WrappedRequest.java
index c43250f874..eb08453816 100644
--- a/src/com/vaadin/terminal/WrappedRequest.java
+++ b/src/com/vaadin/terminal/WrappedRequest.java
@@ -7,6 +7,7 @@ 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 com.vaadin.Application;
@@ -212,4 +213,12 @@ public interface WrappedRequest extends Serializable {
*/
public BrowserDetails getBrowserDetails();
+ public Locale getLocale();
+
+ public String getRemoteAddr();
+
+ public boolean isSecure();
+
+ public String getHeader(String headerName);
+
}
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
index f9268292eb..c0b90c5a68 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
@@ -30,7 +30,6 @@ import javax.portlet.EventRequest;
import javax.portlet.EventResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.MimeResponse;
-import javax.portlet.PortalContext;
import javax.portlet.PortletConfig;
import javax.portlet.PortletContext;
import javax.portlet.PortletException;
@@ -73,6 +72,105 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
private static final Logger logger = Logger
.getLogger(AbstractApplicationPortlet.class.getName());
+ private static class WrappedHttpAndPortletRequest extends
+ WrappedPortletRequest {
+
+ public WrappedHttpAndPortletRequest(PortletRequest request,
+ HttpServletRequest originalRequest) {
+ super(request);
+ this.originalRequest = originalRequest;
+ }
+
+ private final HttpServletRequest originalRequest;
+
+ @Override
+ public String getParameter(String name) {
+ String parameter = super.getParameter(name);
+ if (parameter == null) {
+ parameter = originalRequest.getParameter(name);
+ }
+ return parameter;
+ }
+
+ @Override
+ public String getRemoteAddr() {
+ return originalRequest.getRemoteAddr();
+ }
+
+ @Override
+ public String getHeader(String name) {
+ String header = super.getHeader(name);
+ if (header == null) {
+ header = originalRequest.getHeader(name);
+ }
+ return header;
+ }
+
+ @Override
+ public Map<String, String[]> getParameterMap() {
+ Map<String, String[]> parameterMap = super.getParameterMap();
+ if (parameterMap == null) {
+ parameterMap = originalRequest.getParameterMap();
+ }
+ return parameterMap;
+ }
+ }
+
+ private static class WrappedGateinRequest extends
+ WrappedHttpAndPortletRequest {
+ public WrappedGateinRequest(PortletRequest request) {
+ super(request, getOriginalRequest(request));
+ }
+
+ private static final HttpServletRequest getOriginalRequest(
+ PortletRequest request) {
+ try {
+ Method getRealReq = request.getClass().getMethod(
+ "getRealRequest");
+ HttpServletRequestWrapper origRequest = (HttpServletRequestWrapper) getRealReq
+ .invoke(request);
+ return origRequest;
+ } catch (Exception e) {
+ throw new IllegalStateException("GateIn request not detected",
+ e);
+ }
+ }
+ }
+
+ private static class WrappedLiferayRequest extends
+ WrappedHttpAndPortletRequest {
+
+ public WrappedLiferayRequest(PortletRequest request) {
+ super(request, getOriginalRequest(request));
+ }
+
+ @Override
+ public String getPortalProperty(String name) {
+ return PropsUtil.get(name);
+ }
+
+ private static HttpServletRequest getOriginalRequest(
+ PortletRequest request) {
+ try {
+ // httpRequest = PortalUtil.getHttpServletRequest(request);
+ HttpServletRequest httpRequest = (HttpServletRequest) PortalClassInvoker
+ .invoke("com.liferay.portal.util.PortalUtil",
+ "getHttpServletRequest", request);
+
+ // httpRequest =
+ // PortalUtil.getOriginalServletRequest(httpRequest);
+ httpRequest = (HttpServletRequest) PortalClassInvoker.invoke(
+ "com.liferay.portal.util.PortalUtil",
+ "getOriginalServletRequest", httpRequest);
+ return httpRequest;
+ } catch (Exception e) {
+ throw new IllegalStateException("Liferay request not detected",
+ e);
+ }
+ }
+
+ }
+
private static class AbstractApplicationPortletWrapper implements Callback {
private final AbstractApplicationPortlet portlet;
@@ -165,12 +263,12 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
*
* @param request
*/
- private void checkWidgetsetVersion(PortletRequest request) {
- if (!AbstractApplicationServlet.VERSION.equals(getHTTPRequestParameter(
- request, "wsver"))) {
+ private void checkWidgetsetVersion(WrappedRequest request) {
+ if (!AbstractApplicationServlet.VERSION.equals(request
+ .getParameter("wsver"))) {
logger.warning(String.format(WIDGETSET_MISMATCH_INFO,
AbstractApplicationServlet.VERSION,
- getHTTPRequestParameter(request, "wsver")));
+ request.getParameter("wsver")));
}
}
@@ -278,11 +376,10 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @return The location of static resources (inside which there should be a
* VAADIN directory). Does not end with a slash (/).
*/
- protected String getStaticFilesLocation(PortletRequest request) {
+ protected String getStaticFilesLocation(WrappedPortletRequest request) {
// TODO allow overriding on portlet level?
- String staticFileLocation = getPortalProperty(
- Constants.PORTAL_PARAMETER_VAADIN_RESOURCE_PATH,
- request.getPortalContext());
+ String staticFileLocation = request
+ .getPortalProperty(Constants.PORTAL_PARAMETER_VAADIN_RESOURCE_PATH);
if (staticFileLocation != null) {
// remove trailing slash if any
while (staticFileLocation.endsWith(".")) {
@@ -356,8 +453,19 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
PortletResponse response) throws PortletException, IOException {
AbstractApplicationPortletWrapper portletWrapper = new AbstractApplicationPortletWrapper(
this);
- WrappedPortletRequest wrappedRequest = new WrappedPortletRequest(
- request);
+
+ WrappedPortletRequest wrappedRequest;
+
+ String portalInfo = request.getPortalContext().getPortalInfo()
+ .toLowerCase();
+ if (portalInfo.contains("liferay")) {
+ wrappedRequest = new WrappedLiferayRequest(request);
+ } else if (portalInfo.contains("gatein")) {
+ wrappedRequest = new WrappedGateinRequest(request);
+ } else {
+ wrappedRequest = new WrappedPortletRequest(request);
+ }
+
WrappedPortletResponse wrappedResponse = new WrappedPortletResponse(
response);
@@ -390,7 +498,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
// TODO What about PARAM_UNLOADBURST & redirectToApplication??
/* Find out which application this request is related to */
- application = findApplicationInstance(request, requestType);
+ application = findApplicationInstance(wrappedRequest,
+ requestType);
if (application == null) {
return;
}
@@ -409,8 +518,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
.getApplicationManager(application);
/* Update browser information from request */
- updateBrowserProperties(applicationContext.getBrowser(),
- request);
+ applicationContext.getBrowser().updateRequestDetails(
+ wrappedRequest);
/*
* Call application requestStart before Application.init() is
@@ -483,7 +592,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
// Handles AJAX UIDL requests
if (isRepaintAll(request)) {
// warn if versions do not match
- checkWidgetsetVersion(request);
+ checkWidgetsetVersion(wrappedRequest);
}
applicationManager.handleUidlRequest(wrappedRequest,
wrappedResponse, portletWrapper, root);
@@ -556,7 +665,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @throws IOException
* @throws MalformedURLException
*/
- private void handleOtherRequest(WrappedRequest request,
+ private void handleOtherRequest(WrappedPortletRequest request,
WrappedResponse response, RequestType requestType,
Application application, Root root,
PortletApplicationContext2 applicationContext,
@@ -571,12 +680,10 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
response.setStatus(404);
}
} else if (requestType == RequestType.RENDER) {
- PortletRequest portletRequest = ((WrappedPortletRequest) request)
- .getPortletRequest();
PortletResponse portletResponse = ((WrappedPortletResponse) response)
.getPortletResponse();
- writeAjaxPage((RenderRequest) portletRequest,
- (RenderResponse) portletResponse, root, application);
+ writeAjaxPage(request, (RenderResponse) portletResponse, root,
+ application);
} else if (requestType == RequestType.EVENT) {
// nothing to do, listeners do all the work
} else if (requestType == RequestType.ACTION) {
@@ -587,24 +694,6 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
}
- private void updateBrowserProperties(WebBrowser browser,
- PortletRequest request) {
- String userAgent = getHTTPHeader(request, "user-agent");
- browser.updateRequestDetails(request.getLocale(), null,
- request.isSecure(), userAgent);
- if (getHTTPRequestParameter(request, "repaintAll") != null) {
- browser.updateClientSideDetails(
- getHTTPRequestParameter(request, "sw"),
- getHTTPRequestParameter(request, "sh"),
- getHTTPRequestParameter(request, "tzo"),
- getHTTPRequestParameter(request, "rtzo"),
- getHTTPRequestParameter(request, "dstd"),
- getHTTPRequestParameter(request, "dstActive"),
- getHTTPRequestParameter(request, "curdate"),
- getHTTPRequestParameter(request, "td") != null);
- }
- }
-
@Override
public void processEvent(EventRequest request, EventResponse response)
throws PortletException, IOException {
@@ -714,9 +803,11 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
// Do not send any redirects when running inside a portlet.
}
- private Application findApplicationInstance(PortletRequest request,
- RequestType requestType) throws PortletException,
- SessionExpiredException, MalformedURLException {
+ private Application findApplicationInstance(
+ WrappedPortletRequest wrappedRequest, RequestType requestType)
+ throws PortletException, SessionExpiredException,
+ MalformedURLException {
+ PortletRequest request = wrappedRequest.getPortletRequest();
boolean requestCanCreateApplication = requestCanCreateApplication(
request, requestType);
@@ -731,10 +822,10 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* user not specifically requested to close or restart it.
*/
- final boolean restartApplication = (getHTTPRequestParameter(
- request, URL_PARAMETER_RESTART_APPLICATION) != null);
- final boolean closeApplication = (getHTTPRequestParameter(request,
- URL_PARAMETER_CLOSE_APPLICATION) != null);
+ final boolean restartApplication = (wrappedRequest
+ .getParameter(URL_PARAMETER_RESTART_APPLICATION) != null);
+ final boolean closeApplication = (wrappedRequest
+ .getParameter(URL_PARAMETER_CLOSE_APPLICATION) != null);
if (restartApplication) {
closeApplication(application, request.getPortletSession(false));
@@ -811,7 +902,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @param request
* @return
*/
- protected String getWidgetsetURL(String widgetset, PortletRequest request) {
+ protected String getWidgetsetURL(String widgetset,
+ WrappedPortletRequest request) {
return getStaticFilesLocation(request) + "/" + WIDGETSET_DIRECTORY_PATH
+ widgetset + "/" + widgetset + ".nocache.js?"
+ new Date().getTime();
@@ -828,7 +920,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @param request
* @return
*/
- protected String getThemeURI(String themeName, PortletRequest request) {
+ protected String getThemeURI(String themeName, WrappedPortletRequest request) {
return getStaticFilesLocation(request) + "/" + THEME_DIRECTORY_PATH
+ themeName;
}
@@ -861,7 +953,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* represented by the given URL.
* @throws PortletException
*/
- protected void writeAjaxPage(RenderRequest request,
+ protected void writeAjaxPage(WrappedPortletRequest request,
RenderResponse response, Root root, Application application)
throws IOException, MalformedURLException, PortletException {
@@ -902,7 +994,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
writeAjaxPageHtmlMainDiv(request, response, page,
- getApplicationDomId(request), classNames, divStyle);
+ getApplicationDomId(request.getPortletRequest()), classNames,
+ divStyle);
page.close();
}
@@ -933,16 +1026,16 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @throws IOException
* @throws PortletException
*/
- protected void writeAjaxPageHtmlVaadinScripts(RenderRequest request,
- RenderResponse response, final BufferedWriter writer,
- Application application, String themeName) throws IOException,
- PortletException {
+ protected void writeAjaxPageHtmlVaadinScripts(
+ WrappedPortletRequest request, RenderResponse response,
+ final BufferedWriter writer, Application application,
+ String themeName) throws IOException, PortletException {
String themeURI = getThemeURI(themeName, request);
// fixed base theme to use - all portal pages with Vaadin
// applications will load this exactly once
- String portalTheme = getPortalProperty(PORTAL_PARAMETER_VAADIN_THEME,
- request.getPortalContext());
+ String portalTheme = request
+ .getPortalProperty(PORTAL_PARAMETER_VAADIN_THEME);
writer.write("<script type=\"text/javascript\">\n");
writer.write("if(!vaadin || !vaadin.vaadinConfigurations) {\n "
@@ -976,13 +1069,13 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @param writer
* @throws IOException
*/
- protected void writeAjaxPageScriptWidgetset(RenderRequest request,
+ protected void writeAjaxPageScriptWidgetset(WrappedPortletRequest request,
RenderResponse response, final BufferedWriter writer)
throws IOException {
String requestWidgetset = getApplicationOrSystemProperty(
PARAMETER_WIDGETSET, null);
- String sharedWidgetset = getPortalProperty(
- PORTAL_PARAMETER_VAADIN_WIDGETSET, request.getPortalContext());
+ String sharedWidgetset = request
+ .getPortalProperty(PORTAL_PARAMETER_VAADIN_WIDGETSET);
String widgetset;
if (requestWidgetset != null) {
@@ -1021,7 +1114,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @throws PortletException
*/
protected Map<String, String> getVaadinConfigurationMap(
- RenderRequest request, RenderResponse response,
+ WrappedPortletRequest request, RenderResponse response,
Application application, String themeURI) throws PortletException {
Map<String, String> config = new LinkedHashMap<String, String>();
@@ -1107,12 +1200,13 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @throws IOException
* @throws PortletException
*/
- protected void writeAjaxPageScriptConfigurations(RenderRequest request,
- RenderResponse response, final BufferedWriter writer,
- Map<String, String> config) throws IOException, PortletException {
+ protected void writeAjaxPageScriptConfigurations(
+ WrappedPortletRequest request, RenderResponse response,
+ final BufferedWriter writer, Map<String, String> config)
+ throws IOException, PortletException {
writer.write("vaadin.vaadinConfigurations[\""
- + getApplicationDomId(request) + "\"] = {");
+ + getApplicationDomId(request.getPortletRequest()) + "\"] = {");
Iterator<String> keyIt = config.keySet().iterator();
while (keyIt.hasNext()) {
@@ -1138,7 +1232,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @param portalTheme
* @throws IOException
*/
- protected void writeAjaxPageHtmlTheme(RenderRequest request,
+ protected void writeAjaxPageHtmlTheme(WrappedPortletRequest request,
final BufferedWriter writer, String themeName, String themeURI,
String portalTheme) throws IOException {
writer.write("<script type=\"text/javascript\">\n");
@@ -1187,7 +1281,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @param divStyle
* @throws IOException
*/
- protected void writeAjaxPageHtmlMainDiv(RenderRequest request,
+ protected void writeAjaxPageHtmlMainDiv(WrappedPortletRequest request,
RenderResponse response, final BufferedWriter writer, String id,
String classNames, String divStyle) throws IOException {
writer.write("<div id=\"" + id + "\" class=\"" + classNames + "\" "
@@ -1212,7 +1306,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @param window
* @return
*/
- protected String getThemeForRoot(PortletRequest request, Root root) {
+ protected String getThemeForRoot(WrappedPortletRequest request, Root root) {
// Finds theme name
String themeName;
@@ -1221,9 +1315,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
if (themeName == null) {
// no, is the default theme defined by the portal?
- themeName = getPortalProperty(
- Constants.PORTAL_PARAMETER_VAADIN_THEME,
- request.getPortalContext());
+ themeName = request
+ .getPortalProperty(Constants.PORTAL_PARAMETER_VAADIN_THEME);
}
if (themeName == null) {
@@ -1388,162 +1481,6 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
/**
- * Returns a portal configuration property.
- *
- * Liferay is handled separately as
- * {@link PortalContext#getProperty(String)} does not return portal
- * properties from e.g. portal-ext.properties .
- *
- * @param name
- * @param context
- * @return
- */
- protected static String getPortalProperty(String name, PortalContext context) {
- boolean isLifeRay = context.getPortalInfo().toLowerCase()
- .contains("liferay");
-
- // TODO test on non-LifeRay platforms
-
- String value;
- if (isLifeRay) {
- value = getLifeRayPortalProperty(name);
- } else {
- value = context.getProperty(name);
- }
-
- return value;
- }
-
- private static String getLifeRayPortalProperty(String name) {
- String value;
- try {
- value = PropsUtil.get(name);
- } catch (Exception e) {
- value = null;
- }
- return value;
- }
-
- /**
- * Try to get an HTTP header value from a request using portal specific
- * APIs.
- *
- * @param name
- * HTTP header name
- * @return the value of the header (empty string if defined without a value,
- * null if the parameter is not present or retrieving it failed)
- */
- private static String getHTTPHeader(PortletRequest request, String name) {
- String value = null;
- String portalInfo = request.getPortalContext().getPortalInfo()
- .toLowerCase();
- if (portalInfo.contains("liferay")) {
- value = getLiferayHTTPHeader(request, name);
- } else if (portalInfo.contains("gatein")) {
- value = getGateInHTTPHeader(request, name);
- }
- return value;
- }
-
- /**
- * Try to get the value of a HTTP request parameter from a portlet request
- * using portal specific APIs. It is not possible to get the HTTP request
- * parameters using the official Portlet 2.0 API.
- *
- * @param name
- * HTTP request parameter name
- * @return the value of the parameter (empty string if parameter defined
- * without a value, null if the parameter is not present or
- * retrieving it failed)
- */
- private static String getHTTPRequestParameter(PortletRequest request,
- String name) {
- String value = request.getParameter(name);
- if (value == null) {
- String portalInfo = request.getPortalContext().getPortalInfo()
- .toLowerCase();
- if (portalInfo.contains("liferay")) {
- value = getLiferayHTTPRequestParameter(request, name);
- } else if (portalInfo.contains("gatein")) {
- value = getGateInHTTPRequestParameter(request, name);
- }
- }
- return value;
- }
-
- private static String getGateInHTTPRequestParameter(PortletRequest request,
- String name) {
- String value = null;
- try {
- Method getRealReq = request.getClass().getMethod("getRealRequest");
- HttpServletRequestWrapper origRequest = (HttpServletRequestWrapper) getRealReq
- .invoke(request);
- value = origRequest.getParameter(name);
- } catch (Exception e) {
- // do nothing - not on GateIn simple-portal
- }
- return value;
- }
-
- private static String getLiferayHTTPRequestParameter(
- PortletRequest request, String name) {
- try {
- // httpRequest = PortalUtil.getHttpServletRequest(request);
- HttpServletRequest httpRequest = (HttpServletRequest) PortalClassInvoker
- .invoke("com.liferay.portal.util.PortalUtil",
- "getHttpServletRequest", request);
-
- // httpRequest =
- // PortalUtil.getOriginalServletRequest(httpRequest);
- httpRequest = (HttpServletRequest) PortalClassInvoker.invoke(
- "com.liferay.portal.util.PortalUtil",
- "getOriginalServletRequest", httpRequest);
- if (httpRequest != null) {
- return httpRequest.getParameter(name);
- }
- } catch (Exception e) {
- // ignore and return null - unable to get the original request
- }
- return null;
- }
-
- private static String getGateInHTTPHeader(PortletRequest request,
- String name) {
- String value = null;
- try {
- Method getRealReq = request.getClass().getMethod("getRealRequest");
- HttpServletRequestWrapper origRequest = (HttpServletRequestWrapper) getRealReq
- .invoke(request);
- value = origRequest.getHeader(name);
- } catch (Exception e) {
- // do nothing - not on GateIn simple-portal
- }
- return value;
- }
-
- private static String getLiferayHTTPHeader(PortletRequest request,
- String name) {
- try {
- // httpRequest = PortalUtil.getHttpServletRequest(request);
- HttpServletRequest httpRequest = (HttpServletRequest) PortalClassInvoker
- .invoke("com.liferay.portal.util.PortalUtil",
- "getHttpServletRequest", request);
-
- // httpRequest =
- // PortalUtil.getOriginalServletRequest(httpRequest);
- httpRequest = (HttpServletRequest) PortalClassInvoker.invoke(
- "com.liferay.portal.util.PortalUtil",
- "getOriginalServletRequest", httpRequest);
- if (httpRequest != null) {
- return httpRequest.getHeader(name);
- }
- } catch (Exception e) {
- // ignore and return null - unable to get the original request
- }
- return null;
- }
-
- /**
*
* Gets the application context for a PortletSession. If no context is
* currently stored in a session a new context is created and stored in the
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
index 0d3b7cd754..90ab443d70 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
@@ -423,7 +423,8 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
.getApplicationManager(application, this);
/* Update browser information from the request */
- updateBrowserProperties(webApplicationContext.getBrowser(), request);
+ webApplicationContext.getBrowser().updateRequestDetails(
+ wrappedRequest);
/*
* Call application requestStart before Application.init() is called
@@ -543,22 +544,6 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
return true;
}
- private void updateBrowserProperties(WebBrowser browser,
- HttpServletRequest request) {
- // request based details updated always
- browser.updateRequestDetails(request.getLocale(),
- request.getRemoteAddr(), request.isSecure(),
- request.getHeader("user-agent"));
- if (request.getParameter("repaintAll") != null) {
- browser.updateClientSideDetails(request.getParameter("sw"),
- request.getParameter("sh"), request.getParameter("tzo"),
- request.getParameter("rtzo"), request.getParameter("dstd"),
- request.getParameter("dston"),
- request.getParameter("curdate"),
- request.getParameter("td") != null);
- }
- }
-
protected ClassLoader getClassLoader() throws ServletException {
// Gets custom class loader
final String classLoaderName = getApplicationOrSystemProperty(
diff --git a/src/com/vaadin/terminal/gwt/server/WebBrowser.java b/src/com/vaadin/terminal/gwt/server/WebBrowser.java
index 419373afd4..bd25fa5675 100644
--- a/src/com/vaadin/terminal/gwt/server/WebBrowser.java
+++ b/src/com/vaadin/terminal/gwt/server/WebBrowser.java
@@ -8,6 +8,7 @@ import java.util.Date;
import java.util.Locale;
import com.vaadin.terminal.Terminal;
+import com.vaadin.terminal.WrappedRequest;
import com.vaadin.terminal.gwt.client.VBrowserDetails;
/**
@@ -324,8 +325,8 @@ public class WebBrowser implements Terminal {
* the current date in milliseconds since the epoch
* @param touchDevice
*/
- void updateClientSideDetails(String sw, String sh, String tzo, String rtzo,
- String dstSavings, String dstInEffect, String curDate,
+ private void updateClientSideDetails(String sw, String sh, String tzo,
+ String rtzo, String dstSavings, String dstInEffect, String curDate,
boolean touchDevice) {
if (sw != null) {
try {
@@ -379,25 +380,29 @@ public class WebBrowser implements Terminal {
* only. Updates all properties in the class according to the given
* information.
*
- * @param locale
- * The browser primary locale
- * @param address
- * The browser ip address
- * @param secureConnection
- * true if using an https connection
- * @param agent
- * Raw userAgent string from the browser
+ * @param request
+ * the wrapped request to read the information from
*/
- void updateRequestDetails(Locale locale, String address,
- boolean secureConnection, String agent) {
- this.locale = locale;
- this.address = address;
- this.secureConnection = secureConnection;
+ void updateRequestDetails(WrappedRequest request) {
+ locale = request.getLocale();
+ address = request.getRemoteAddr();
+ secureConnection = request.isSecure();
+ String agent = request.getHeader("user-agent");
+
if (agent != null) {
browserApplication = agent;
browserDetails = new VBrowserDetails(agent);
}
+ if (request.getParameter("repaintAll") != null
+ || request.getParameter("browserDetails") != null) {
+ updateClientSideDetails(request.getParameter("sw"),
+ request.getParameter("sh"), request.getParameter("tzo"),
+ request.getParameter("rtzo"), request.getParameter("dstd"),
+ request.getParameter("dston"),
+ request.getParameter("curdate"),
+ request.getParameter("td") != null);
+ }
}
/**
diff --git a/src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java b/src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java
index 3970eac6ba..c6d3b06dd8 100644
--- a/src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java
+++ b/src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java
@@ -6,6 +6,7 @@ package com.vaadin.terminal.gwt.server;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -56,10 +57,6 @@ public class WrappedHttpServletRequest implements WrappedRequest {
return request;
}
- public boolean isRunningInPortlet() {
- return false;
- }
-
public void setAttribute(String name, Object o) {
request.setAttribute(name, o);
}
@@ -100,4 +97,20 @@ public class WrappedHttpServletRequest implements WrappedRequest {
// No browserDetails available for normal requests
return null;
}
+
+ public Locale getLocale() {
+ return request.getLocale();
+ }
+
+ public String getRemoteAddr() {
+ return request.getRemoteAddr();
+ }
+
+ public boolean isSecure() {
+ return request.isSecure();
+ }
+
+ public String getHeader(String headerName) {
+ return request.getHeader(headerName);
+ }
} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java b/src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java
index bdf1cfbbd3..d73748683c 100644
--- a/src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java
+++ b/src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java
@@ -6,13 +6,12 @@ package com.vaadin.terminal.gwt.server;
import java.io.IOException;
import java.io.InputStream;
-import java.lang.reflect.Method;
+import java.util.Locale;
import java.util.Map;
import javax.portlet.ClientDataRequest;
import javax.portlet.PortletRequest;
import javax.portlet.ResourceRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
import com.vaadin.terminal.WrappedRequest;
@@ -29,33 +28,29 @@ public class WrappedPortletRequest implements WrappedRequest {
}
public int getContentLength() {
- return ((ClientDataRequest) request).getContentLength();
+ try {
+ return ((ClientDataRequest) request).getContentLength();
+ } catch (ClassCastException e) {
+ throw new IllegalStateException(
+ "Content lenght only available for ClientDataRequests");
+ }
}
public InputStream getInputStream() throws IOException {
- return ((ClientDataRequest) request).getPortletInputStream();
+ try {
+ return ((ClientDataRequest) request).getPortletInputStream();
+ } catch (ClassCastException e) {
+ throw new IllegalStateException(
+ "Input data only available for ClientDataRequests");
+ }
}
public String getParameter(String name) {
- String value = request.getParameter(name);
- if (value == null) {
- // for GateIn portlet container simple-portal
- try {
- Method getRealReq = request.getClass().getMethod(
- "getRealRequest");
- HttpServletRequestWrapper origRequest = (HttpServletRequestWrapper) getRealReq
- .invoke(request);
- value = origRequest.getParameter(name);
- } catch (Exception e) {
- // do nothing - not on GateIn simple-portal
- }
- }
- return value;
+ return request.getParameter(name);
}
public Map<String, String[]> getParameterMap() {
return request.getParameterMap();
- // TODO GateIn hack required here as well?
}
public String getRequestID() {
@@ -66,10 +61,6 @@ public class WrappedPortletRequest implements WrappedRequest {
return request;
}
- public boolean isRunningInPortlet() {
- return true;
- }
-
public void setAttribute(String name, Object o) {
request.setAttribute(name, o);
}
@@ -79,7 +70,7 @@ public class WrappedPortletRequest implements WrappedRequest {
return ((ResourceRequest) request).getResourceID();
} else {
// We do not use paths in portlet mode
- throw new UnsupportedOperationException(
+ throw new IllegalStateException(
"PathInfo only available when using ResourceRequests");
}
}
@@ -101,7 +92,12 @@ public class WrappedPortletRequest implements WrappedRequest {
}
public String getContentType() {
- return ((ResourceRequest) request).getContentType();
+ try {
+ return ((ResourceRequest) request).getContentType();
+ } catch (ClassCastException e) {
+ throw new IllegalStateException(
+ "Content type only available for ResourceRequests");
+ }
}
public String getStaticFileLocation() {
@@ -113,4 +109,24 @@ public class WrappedPortletRequest implements WrappedRequest {
return null;
}
+ public Locale getLocale() {
+ return request.getLocale();
+ }
+
+ public String getRemoteAddr() {
+ return null;
+ }
+
+ public boolean isSecure() {
+ return request.isSecure();
+ }
+
+ public String getHeader(String string) {
+ return null;
+ }
+
+ public String getPortalProperty(String name) {
+ return request.getPortalContext().getProperty(name);
+ }
+
} \ No newline at end of file