PromotionsServlet.java 4.95 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.servlet.ServletException
 *  org.apache.commons.lang.StringUtils
 *  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.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 *  org.apache.sling.commons.json.io.JSONWriter
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.commerce.impl.promotion;

import com.adobe.cq.commerce.api.CommerceProvider;
import com.adobe.cq.commerce.api.CommerceService;
import com.adobe.cq.commerce.api.CommerceServiceFactory;
import com.adobe.cq.commerce.api.promotion.Promotion;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.servlet.ServletException;
import org.apache.commons.lang.StringUtils;
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.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.commons.json.io.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Service
@Properties(value={@Property(name="service.description", value={"Enumerates the promotions available to a given commerce provider."}), @Property(name="sling.servlet.paths", value={"/libs/commerce/promotions"}), @Property(name="sling.servlet.methods", value={"GET"})})
public class PromotionsServlet
extends SlingAllMethodsServlet {
    private static final Logger log = LoggerFactory.getLogger(PromotionsServlet.class);
    @Reference
    private CommerceProvider commerceProvider = null;

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        try {
            CommerceService service;
            Resource resource;
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Cache-Control", "no-cache");
            String provider = request.getParameter("provider");
            if (provider == null) {
                response.sendError(400, "Missing request parameter: provider");
                return;
            }
            JSONWriter w = new JSONWriter((Writer)response.getWriter());
            w.array();
            CommerceServiceFactory factory = this.commerceProvider.getServiceFactory(provider);
            if (factory != null && (service = factory.getCommerceService(resource = request.getResource())) != null) {
                List<Promotion> availablePromotions = service.getAvailablePromotions(resource.getResourceResolver());
                Collections.sort(availablePromotions, new Comparator<Promotion>(){

                    @Override
                    public int compare(Promotion promotion1, Promotion promotion2) {
                        String title1 = PromotionsServlet.this.getPromotionTitle(promotion1);
                        String title2 = PromotionsServlet.this.getPromotionTitle(promotion2);
                        return title1.compareToIgnoreCase(title2);
                    }
                });
                for (Promotion promotion : availablePromotions) {
                    String path = promotion.getPath();
                    String title = this.getPromotionTitle(promotion);
                    w.object().key("value").value((Object)path).key("text").value((Object)title).endObject();
                }
            }
            w.endArray();
        }
        catch (Exception e) {
            log.error("Error while generating JSON list", (Throwable)e);
            response.sendError(500, e.toString());
        }
    }

    private String getPromotionTitle(Promotion promotion) {
        String title1 = promotion.getTitle();
        if (title1 == null) {
            title1 = StringUtils.capitalize((String)StringUtils.capitalize((String)promotion.getPath()));
        }
        return title1;
    }

    protected void bindCommerceProvider(CommerceProvider commerceProvider) {
        this.commerceProvider = commerceProvider;
    }

    protected void unbindCommerceProvider(CommerceProvider commerceProvider) {
        if (this.commerceProvider == commerceProvider) {
            this.commerceProvider = null;
        }
    }

}