ProductFeedServlet.java 3.5 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.servlet.ServletException
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.ModifiableValueMap
 *  org.apache.sling.api.resource.PersistenceException
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.api.servlets.SlingSafeMethodsServlet
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.searchpromote.feed.impl.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Service;
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.resource.ModifiableValueMap;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service
@SlingServlet(resourceTypes={"cq/commerce/searchpromote/feed/deleted"}, methods={"GET"}, name="com.day.cq.searchpromote.feed.impl.servlet.ProductFeedServlet", description="Servlet that generates an Adobe Search&Promote Index Connector feed")
public class ProductFeedServlet
extends SlingSafeMethodsServlet {
    private final Logger log;

    public ProductFeedServlet() {
        this.log = LoggerFactory.getLogger(this.getClass());
    }

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        long startTime = System.currentTimeMillis();
        String feed = null;
        ResourceResolver resolver = request.getResourceResolver();
        this.log.debug("Deleted products feed requested...");
        String contentType = "text/plain";
        feed = this.generateDeletedProductsFeed(request);
        this.purgeDeletedSkus(request);
        this.log.debug("Feed generated in {}ms", (Object)(System.currentTimeMillis() - startTime));
        response.setContentType(contentType);
        PrintWriter out = response.getWriter();
        out.print(feed);
    }

    private void purgeDeletedSkus(SlingHttpServletRequest request) throws PersistenceException {
        this.log.debug("Marking feed as consumed...");
        ResourceResolver resolver = request.getResourceResolver();
        ModifiableValueMap mvm = (ModifiableValueMap)request.getResource().adaptTo(ModifiableValueMap.class);
        mvm.put((Object)"feed_consumed", (Object)true);
        mvm.remove((Object)"skus");
        resolver.commit();
    }

    private String generateDeletedProductsFeed(SlingHttpServletRequest request) {
        Resource rootResource = request.getResource();
        ValueMap properties = (ValueMap)rootResource.adaptTo(ValueMap.class);
        StringBuilder feed = new StringBuilder();
        if (properties.containsKey((Object)"skus")) {
            String[] skus;
            for (String sku : skus = (String[])properties.get("skus", String[].class)) {
                feed.append(sku).append("\n");
            }
        }
        return feed.toString();
    }
}