From 9d7320c7ccd34cd2d703804de30afbabd24f6fc8 Mon Sep 17 00:00:00 2001 From: Michael Wechner Date: Sat, 7 Apr 2012 12:31:22 +0200 Subject: [PATCH] check whether mobile device --- .../redirect/RedirectResourceV101.java | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/src/contributions/resources/redirect/src/java/org/wyona/yanel/impl/resources/redirect/RedirectResourceV101.java b/src/contributions/resources/redirect/src/java/org/wyona/yanel/impl/resources/redirect/RedirectResourceV101.java index 3cdb8e8ec..4e071a807 100644 --- a/src/contributions/resources/redirect/src/java/org/wyona/yanel/impl/resources/redirect/RedirectResourceV101.java +++ b/src/contributions/resources/redirect/src/java/org/wyona/yanel/impl/resources/redirect/RedirectResourceV101.java @@ -94,13 +94,30 @@ public View getView(String viewId, String revisionName) throws Exception { log.debug("Localization: " + localizationLanguage); for (int i = 0; i < languageRedirectConfigs.length; i++) { try { - String device = languageRedirectConfigs[i].getAttribute("device", null); - if (device != null) { - log.warn("DEBUG: Device: " + device); - } if (languageRedirectConfigs[i].getAttribute("code").equals(localizationLanguage)) { response.setStatus(307); - response.setHeader("Location", languageRedirectConfigs[i].getAttribute("href")); + String href = languageRedirectConfigs[i].getAttribute("href"); + response.setHeader("Location", href); + + String device = languageRedirectConfigs[i].getAttribute("device", null); + if (device != null) { + if (device.equals("web.xml:mobile-devices")) { + log.warn("DEBUG: Client language '" + localizationLanguage + "' matched and device '" + device + "' is supported. Let's check whether client is a mobile device ..."); + if (isMobileDevice()) { + log.warn("DEBUG: Client is mobile device, hence redirect to: " + href); + return view; + } else { + log.warn("DEBUG: Client is not a mobile device."); + continue; + } + } else { + log.warn("DEBUG: Device '" + device + "' not supported."); + continue; + } + } else { + log.warn("DEBUG: No device specified (Language: " + localizationLanguage + ")."); + } + return view; } } catch (Exception e) { log.error(e.getMessage(), e); @@ -220,4 +237,23 @@ public String[] getPropertyNames() { pn[0] = REDIRECT_URL; return pn; } + + /** + * Check whether user agent is a mobile device + */ + private boolean isMobileDevice() { + javax.servlet.http.HttpSession session = getEnvironment().getRequest().getSession(true); + if (session != null) { + String mobileDevice = (String) session.getAttribute("yanel.mobile"); + //TODO: String mobileDevice = (String) getEnvironment().getRequest().getSession(true).getAttribute(org.wyona.yanel.servlet.YanelServlet.MOBILE_KEY); + if (mobileDevice != null && !mobileDevice.equals("false")) { + return true; + } else { + return false; + } + } else { + log.warn("No HTTP session available (maybe because Yanel is used via the command line or some custom junit tests do not provide session handling)!"); + return false; + } + } }