MobilePlatformProviderOutputServlet.java 5.23 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.servlet.Servlet
 *  javax.servlet.ServletException
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.ReferenceCardinality
 *  org.apache.felix.scr.annotations.ReferencePolicy
 *  org.apache.felix.scr.annotations.References
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.request.RequestParameter
 *  org.apache.sling.api.resource.Resource
 *  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.cq.mobile.platform.impl.store.MobilePlatformProvider;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.References;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;

@Component(immediate=1, metatype=1, label="Invokes the MobilePlatformProviderOutputServlet to generate the assets required by the provider")
@Service(value={Servlet.class})
@Properties(value={@Property(name="sling.servlet.resourceTypes", value={"sling/servlet/default"}), @Property(name="sling.servlet.methods", value={"GET"}), @Property(name="sling.servlet.selectors", value={"mobileapps.provider"}), @Property(name="sling.servlet.extensions", value={"zip"})})
@References(value={@Reference(name="mobilePlatformProvider", referenceInterface=MobilePlatformProvider.class, cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, policy=ReferencePolicy.DYNAMIC)})
public class MobilePlatformProviderOutputServlet
extends SlingAllMethodsServlet {
    private final Map<String, MobilePlatformProvider> providers = new HashMap<String, MobilePlatformProvider>();

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        RequestParameter store = request.getRequestParameter("store");
        String platformId = store == null ? "default" : store.getString();
        Resource resource = request.getResource();
        MobileResource mobileResource = (MobileResource)resource.adaptTo(MobileResource.class);
        if (mobileResource != null && !mobileResource.isA(MobileResourceType.INSTANCE.getType())) {
            throw new IllegalArgumentException("Resource must be a Mobile Resource of type " + MobileResourceType.INSTANCE.getType());
        }
        MobilePlatformProvider provider = this.getMobilePlatformProvider(platformId);
        if (provider == null) {
            throw new IllegalArgumentException("Unable to locate content provider");
        }
        provider.generate(mobileResource, platformId, response);
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    protected void bindMobilePlatformProvider(MobilePlatformProvider provider, Map<String, Object> properties) {
        String storeName = (String)properties.get("cq.mobile.apps.platformprovider");
        if (storeName != null && provider != null) {
            Map<String, MobilePlatformProvider> map = this.providers;
            synchronized (map) {
                this.providers.put(storeName, provider);
            }
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    protected void unbindMobilePlatformProvider(MobilePlatformProvider provider, Map<String, Object> properties) {
        String operationName = (String)properties.get("cq.mobile.apps.platformprovider");
        if (operationName != null) {
            Map<String, MobilePlatformProvider> map = this.providers;
            synchronized (map) {
                this.providers.remove(operationName);
            }
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    private MobilePlatformProvider getMobilePlatformProvider(String storeId) {
        if (storeId == null) {
            return this.providers.get("default");
        }
        Map<String, MobilePlatformProvider> map = this.providers;
        synchronized (map) {
            MobilePlatformProvider mobilePlatformProvider = this.providers.get(storeId);
            if (mobilePlatformProvider == null) {
                mobilePlatformProvider = this.providers.get("default");
            }
            return mobilePlatformProvider;
        }
    }
}