From ff7e56a2af67992d79753b8db514fafa18f0e13e Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Wed, 7 Jul 2010 08:05:27 +0000 Subject: [PATCH] #5148 browser detection when running as portlet 2.0 svn changeset:14117/svn branch:6.4 --- .../server/AbstractApplicationPortlet.java | 62 ++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java index c8d58abdb8..9a868d5516 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java @@ -555,9 +555,10 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet private void updateBrowserProperties(WebBrowser browser, PortletRequest request) { + String userAgent = getHTTPHeader(request, "user-agent"); browser.updateBrowserProperties(request.getLocale(), null, request - .isSecure(), request.getProperty("user-agent"), request - .getParameter("sw"), request.getParameter("sh")); + .isSecure(), userAgent, getHTTPRequestParameter(request, "sw"), + getHTTPRequestParameter(request, "sh")); } @Override @@ -1434,6 +1435,27 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet 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 @@ -1496,4 +1518,40 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet 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; + } + } -- 2.39.5