MobileUtil.java 5.52 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.wcm.api.Page
 *  com.day.cq.wcm.api.PageManager
 *  com.day.cq.wcm.mobile.api.device.DeviceGroup
 *  com.day.cq.wcm.mobile.api.device.DeviceGroupList
 *  com.day.cq.wcm.mobile.api.device.capability.DeviceCapability
 *  org.apache.commons.lang.StringUtils
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.request.RequestPathInfo
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceUtil
 *  org.apache.sling.api.resource.ValueMap
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.wcm.mobile.core;

import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import com.day.cq.wcm.mobile.api.device.DeviceGroup;
import com.day.cq.wcm.mobile.api.device.DeviceGroupList;
import com.day.cq.wcm.mobile.api.device.capability.DeviceCapability;
import org.apache.commons.lang.StringUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MobileUtil {
    private static final Logger log = LoggerFactory.getLogger(MobileUtil.class);

    public static boolean isDeviceGroup(Resource resource) {
        return null != resource && ResourceUtil.isA((Resource)resource, (String)"wcm/mobile/components/devicegroup");
    }

    public static boolean isDeviceGroup(Page page) {
        return null != page && MobileUtil.isDeviceGroup(page.getContentResource());
    }

    public static DeviceGroup getDefaultDeviceGroup(Page page) {
        DeviceGroupList mappedDeviceGroups = (DeviceGroupList)page.adaptTo(DeviceGroupList.class);
        if (null != mappedDeviceGroups && !mappedDeviceGroups.isEmpty()) {
            return (DeviceGroup)mappedDeviceGroups.get(0);
        }
        return null;
    }

    public static String getDeviceGroupSelector(SlingHttpServletRequest request) {
        String[] selectors = request.getRequestPathInfo().getSelectors();
        return 0 < selectors.length ? selectors[selectors.length - 1] : null;
    }

    public static boolean hasCapability(SlingHttpServletRequest request, DeviceCapability capability) {
        DeviceGroup group = (DeviceGroup)request.adaptTo(DeviceGroup.class);
        return null != group && group.hasCapability(capability);
    }

    public static boolean isMobileRequest(SlingHttpServletRequest r) {
        return StringUtils.contains((String)r.getHeader("User-Agent"), (String)"Mobile") || StringUtils.contains((String)r.getHeader("User-Agent"), (String)"Blackberry");
    }

    public static boolean isMobileResource(Resource r) {
        return MobileUtil.isMobileResource(r, null);
    }

    public static boolean isMobileResource(Resource r, String[] types) {
        if (r == null) {
            log.debug("Resource is null, isMobileResource() returns false");
            return false;
        }
        boolean isMobileResource = false;
        PageManager pm = (PageManager)r.getResourceResolver().adaptTo(PageManager.class);
        if (null != pm) {
            Page page = pm.getContainingPage(r);
            if (null != page) {
                while (!isMobileResource && null != page) {
                    Resource content = page.getContentResource();
                    boolean bl = isMobileResource = null != content && ResourceUtil.isA((Resource)content, (String)"wcm/mobile/components/page");
                    if (!isMobileResource && null != content && null != types) {
                        for (String type : types) {
                            if (type != null && type.length() > 0) {
                                isMobileResource = ResourceUtil.isA((Resource)content, (String)type);
                            }
                            if (isMobileResource) break;
                        }
                    }
                    if (isMobileResource) {
                        log.debug("isMobileResource: resource [{}] is a mobile resource by associated page [{}]", (Object)r.getPath(), (Object)page.getPath());
                    }
                    page = page.getParent();
                }
            } else {
                log.debug("isMobileResource: cannot check resource [{}], not part of a page.", (Object)r.getPath());
            }
        } else {
            log.error("isMobileResource: cannot check resource [{}], page manager unavailable.", (Object)r.getPath());
        }
        if (!isMobileResource) {
            log.debug("isMobileResource: resource [{}] is not a mobile resource.", (Object)r.getPath());
        }
        return isMobileResource;
    }

    public static boolean isPreventRedirect(Resource r) {
        Resource content;
        String path = r.getPath();
        int idx = path.indexOf("/jcr:content");
        if (idx >= 0) {
            path = path.substring(0, idx);
        }
        if ((content = r.getResourceResolver().getResource(path + "/jcr:content")) != null) {
            ValueMap props = (ValueMap)content.adaptTo(ValueMap.class);
            return (Boolean)props.get("mobilePreventRedirect", (Object)false);
        }
        return false;
    }

    public static boolean isNoMatch(String[] selectors) {
        return selectors != null && selectors.length > 0 && selectors[selectors.length - 1].equals("nomatch");
    }
}