MobilePlatformProviderServlet.java 4.47 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.ui.components.Config
 *  com.adobe.granite.ui.components.ds.AbstractDataSource
 *  com.adobe.granite.ui.components.ds.DataSource
 *  com.adobe.granite.ui.components.ds.EmptyDataSource
 *  com.adobe.granite.ui.components.ds.ValueMapResource
 *  javax.servlet.ServletException
 *  org.apache.commons.lang3.ArrayUtils
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.request.RequestPathInfo
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceMetadata
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 */
package com.adobe.cq.mobile.platform.impl.servlets;

import com.adobe.cq.mobile.platform.MobileResource;
import com.adobe.cq.mobile.platform.MobileResourceType;
import com.adobe.granite.ui.components.Config;
import com.adobe.granite.ui.components.ds.AbstractDataSource;
import com.adobe.granite.ui.components.ds.DataSource;
import com.adobe.granite.ui.components.ds.EmptyDataSource;
import com.adobe.granite.ui.components.ds.ValueMapResource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;

@SlingServlet(methods={"GET"}, resourceTypes={"mobileapps/gui/components/datasources/platformprovider"})
public class MobilePlatformProviderServlet
extends SlingAllMethodsServlet {
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        Object ds;
        String suffix = request.getRequestPathInfo().getSuffix();
        Resource appInstance = request.getResourceResolver().getResource(suffix);
        Resource dataSourceResource = request.getResource().getChild(Config.DATASOURCE);
        Config dsCfg = new Config(dataSourceResource);
        final ArrayList<Object> platformList = new ArrayList<Object>();
        MobileResource mobileResource = (MobileResource)appInstance.adaptTo(MobileResource.class);
        if (!mobileResource.isA(MobileResourceType.INSTANCE.getType())) {
            ds = EmptyDataSource.instance();
        } else {
            ValueMap properties = mobileResource.getProperties();
            Object[] platforms = (String[])properties.get("widget/platforms", String[].class);
            if (ArrayUtils.isNotEmpty((Object[])platforms)) {
                HashMap<String, Resource> resourceToIdMap = new HashMap<String, Resource>();
                Iterable children = dataSourceResource.getChildren();
                for (Resource platform : children) {
                    ValueMap map = platform.getValueMap();
                    String id = (String)map.get("id", String.class);
                    resourceToIdMap.put(id, platform);
                }
                for (Object sPlatform : platforms) {
                    if (resourceToIdMap.containsKey(sPlatform)) {
                        platformList.add(resourceToIdMap.get(sPlatform));
                        continue;
                    }
                    Resource defaultResource = dsCfg.getChild("default");
                    ValueMap map = defaultResource.getValueMap();
                    map.put((Object)"id", sPlatform);
                    ValueMapResource syntheticResource = new ValueMapResource(request.getResourceResolver(), defaultResource.getResourceMetadata(), defaultResource.getResourceType(), map);
                    platformList.add((Object)syntheticResource);
                }
            }
            ds = new AbstractDataSource(){

                public Iterator<Resource> iterator() {
                    return platformList.iterator();
                }
            };
        }
        request.setAttribute(DataSource.class.getName(), ds);
    }

}