CampaignsDataSourceServlet.java 6 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.ui.components.ds.DataSource
 *  com.adobe.granite.ui.components.ds.SimpleDataSource
 *  com.adobe.granite.ui.components.ds.ValueMapResource
 *  com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap
 *  com.day.cq.commons.inherit.InheritanceValueMap
 *  com.day.cq.wcm.webservicesupport.Configuration
 *  com.day.cq.wcm.webservicesupport.ConfigurationManager
 *  com.day.cq.wcm.webservicesupport.ConfigurationManagerFactory
 *  javax.servlet.ServletException
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.AbstractResourceVisitor
 *  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.SlingSafeMethodsServlet
 *  org.apache.sling.api.wrappers.ValueMapDecorator
 */
package com.day.cq.personalization;

import com.adobe.granite.ui.components.ds.DataSource;
import com.adobe.granite.ui.components.ds.SimpleDataSource;
import com.adobe.granite.ui.components.ds.ValueMapResource;
import com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap;
import com.day.cq.commons.inherit.InheritanceValueMap;
import com.day.cq.wcm.webservicesupport.Configuration;
import com.day.cq.wcm.webservicesupport.ConfigurationManager;
import com.day.cq.wcm.webservicesupport.ConfigurationManagerFactory;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.*;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.api.wrappers.ValueMapDecorator;

import javax.servlet.ServletException;
import java.io.IOException;
import java.text.Collator;
import java.util.*;

@Deprecated
public class CampaignsDataSourceServlet
extends SlingSafeMethodsServlet {
    private static final String CAMPAIGNPAGE_RESOURCE_TYPE = "cq/personalization/components/campaignpage";
    private static final String CAMPAIGNS_ROOT = "/content/campaigns";
    private static final String ACTIVITY_TYPE = "campaignType";
    private ConfigurationManagerFactory configManagerFactory;

    protected void bindConfigManagerFactory(ConfigurationManagerFactory configManagerFactory) {
    }

    protected void unbindConfigManagerFactory(ConfigurationManagerFactory configManagerFactory) {
    }

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        ResourceResolver resolver = request.getResourceResolver();
        CampaignsRetriever visitor = new CampaignsRetriever();
        visitor.accept(resolver.getResource("/content/campaigns"));
        List<Resource> resourceList = visitor.getCampaigns();
        final Collator c = Collator.getInstance(request.getLocale());
        Collections.sort(resourceList, new Comparator<Resource>(){

            @Override
            public int compare(Resource r1, Resource r2) {
                String t1 = (String)r1.getValueMap().get("text", (Object)"");
                String t2 = (String)r2.getValueMap().get("text", (Object)"");
                return c.compare(t1, t2);
            }
        });
        request.setAttribute(DataSource.class.getName(), (Object)new SimpleDataSource(resourceList.iterator()));
    }

    private Configuration getTargetConfiguration(InheritanceValueMap properties, ConfigurationManager cfgMgr) {
        String[] services = (String[])properties.getInherited("cq:cloudserviceconfigs", (Object)new String[0]);
        if (cfgMgr != null) {
            return cfgMgr.getConfiguration("testandtarget", services);
        }
        return null;
    }

    class CampaignsRetriever
    extends AbstractResourceVisitor {
        List<Resource> campaigns;

        CampaignsRetriever() {
            this.campaigns = new ArrayList<Resource>();
        }

        protected void visit(Resource resource) {
            if ("cq/personalization/components/campaignpage".equals(resource.getResourceType())) {
                HierarchyNodeInheritanceValueMap props = new HierarchyNodeInheritanceValueMap(resource);
                ResourceResolver resolver = resource.getResourceResolver();
                ConfigurationManager cfgMgr = CampaignsDataSourceServlet.this.configManagerFactory.getConfigurationManager(resolver);
                Configuration targetConfig = CampaignsDataSourceServlet.this.getTargetConfiguration((InheritanceValueMap)props, cfgMgr);
                String activityTitle = (String)props.get("jcr:title", (Object)resource.getParent().getName());
                String activityType = (String)props.get("campaignType", (Object)"landingPage");
                String activityTypeMarker = "AEM";
                boolean isActiveProp = (Boolean)props.get("campaignActive", (Object)true);
                Calendar campaignEndTime = (Calendar)props.get("offTime", Calendar.class);
                Calendar currentTime = Calendar.getInstance();
                boolean isActive = isActiveProp && (campaignEndTime == null || currentTime.before(campaignEndTime));
                boolean useActivity = true;
                if (targetConfig != null) {
                    activityTypeMarker = "landingPage".equals(activityType) ? "XT" : "A/B";
                    useActivity = isActive;
                }
                if (useActivity) {
                    final String title = activityTitle + " [" + activityTypeMarker + "]";
                    final String path = resource.getParent().getPath();
                    HashMap<String, Object> entry = new HashMap<String, Object>(){};
                    ValueMapResource vmRes = new ValueMapResource(resolver, new ResourceMetadata(), "", (ValueMap)new ValueMapDecorator((Map)entry));
                    this.campaigns.add((Resource)vmRes);
                }
            }
        }

        public List<Resource> getCampaigns() {
            return this.campaigns;
        }

    }

}