RecommendationTaskStatusServlet.java 4.66 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.taskmanagement.ComparisonOperator
 *  com.adobe.granite.taskmanagement.Condition
 *  com.adobe.granite.taskmanagement.Filter
 *  com.adobe.granite.taskmanagement.Task
 *  com.adobe.granite.taskmanagement.TaskManager
 *  com.adobe.granite.taskmanagement.TaskProperty
 *  com.adobe.granite.workflow.exec.Status
 *  com.day.cq.commons.TidyJSONWriter
 *  javax.servlet.ServletException
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  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.SlingSafeMethodsServlet
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.contentinsight.impl.servlets;

import com.adobe.granite.taskmanagement.ComparisonOperator;
import com.adobe.granite.taskmanagement.Condition;
import com.adobe.granite.taskmanagement.Filter;
import com.adobe.granite.taskmanagement.Task;
import com.adobe.granite.taskmanagement.TaskManager;
import com.adobe.granite.taskmanagement.TaskProperty;
import com.adobe.granite.workflow.exec.Status;
import com.day.cq.commons.TidyJSONWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import javax.servlet.ServletException;
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.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SlingServlet(generateComponent=1, resourceTypes={"cq:Page"}, extensions={"json"}, selectors={"seotaskstatus"}, methods={"GET"}, label="SEO Recommendations Task status servlet", description="Determines the SEO Recommendations tasks for a page and their current status")
public class RecommendationTaskStatusServlet
extends SlingSafeMethodsServlet {
    private static final long serialVersionUID = -5161887928130115575L;
    private final Logger log;

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

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");
        Resource currentResource = request.getResource();
        if (currentResource == null) {
            this.log.error("No resource found on request!");
            return;
        }
        ResourceResolver resolver = currentResource.getResourceResolver();
        Resource taskRoot = resolver.getResource("/content/projects");
        TaskManager taskManager = (TaskManager)taskRoot.adaptTo(TaskManager.class);
        Condition taskContentCondition = new Condition();
        taskContentCondition.setTaskProperty(TaskProperty.CONTENT_PATH);
        taskContentCondition.setComparisonOperator(ComparisonOperator.EQUALS);
        taskContentCondition.setComparisonValue((Object)currentResource.getPath());
        Filter taskFilter = new Filter();
        taskFilter.addCondition(new Condition[]{taskContentCondition});
        try {
            Iterator taskList = taskManager.getTasks(taskFilter);
            HashMap<String, Task> nameFlattenedTasks = new HashMap<String, Task>();
            while (taskList.hasNext()) {
                Task relatedTask = (Task)taskList.next();
                Task keptTask = (Task)nameFlattenedTasks.get(relatedTask.getName());
                if (keptTask != null && relatedTask.getStatus() != Status.ACTIVE) continue;
                nameFlattenedTasks.put(relatedTask.getName(), relatedTask);
            }
            TidyJSONWriter json = new TidyJSONWriter((Writer)response.getWriter());
            json.object();
            for (String taskName : nameFlattenedTasks.keySet()) {
                Task task = (Task)nameFlattenedTasks.get(taskName);
                json.key((String)task.getProperty("recommendationId"));
                json.object();
                json.key("path").value((Object)task.getId());
                json.key("status").value((Object)task.getStatus());
                json.endObject();
            }
            json.endObject();
        }
        catch (Exception e) {
            this.log.error("Could not get the tasks related to content {}!", (Object)currentResource.getPath(), (Object)e);
        }
    }
}