TaskListServlet.java 7.96 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.TaskManagerException
 *  com.adobe.granite.taskmanagement.TaskProperty
 *  com.adobe.granite.workflow.exec.Status
 *  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.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.io.JSONWriter
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.granite.taskmanagement.impl.servlet;

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.TaskManagerException;
import com.adobe.granite.taskmanagement.TaskProperty;
import com.adobe.granite.taskmanagement.impl.servlet.TaskJSONField;
import com.adobe.granite.taskmanagement.impl.servlet.TaskServletUtils;
import com.adobe.granite.workflow.exec.Status;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Iterator;
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.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.io.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Service(value={Servlet.class})
@Properties(value={@Property(name="sling.servlet.paths", value={"/libs/granite/taskmanager/list.json"})})
public class TaskListServlet
extends SlingAllMethodsServlet {
    private static final Logger logger = LoggerFactory.getLogger(TaskListServlet.class);
    private static final String PARNAME_PARENT_TASK_ID = "parentTaskId";
    private static final String PARNAME_PATH = "path";
    private static final String PARNAME_CHECK_SUBTASKS = "checkSubTasks";
    private static final String PARNAME_LOAD_TASK_STRUCTURE = "loadTaskStructure";
    private static final String PARNAME_RETURN_STATUSES = "returnStatusType";
    public static final String PARNAME_TASK_TYPE = "taskType";
    @Deprecated
    private static final String PARNAME_RETURN_COMPLETED = "returnCompleted";
    private static final String STATUS_ACTIVE = "active";
    private static final String STATUS_ACTIVE_AND_COMPLETE = "all";
    private static final String STATUS_COMPLETE = "complete";

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        logger.debug("TaskListServlet.doGet called");
        try {
            boolean loadFlat;
            ResourceResolver resolver = request.getResourceResolver();
            TaskManager taskManager = (TaskManager)resolver.adaptTo(TaskManager.class);
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            JSONWriter w = new JSONWriter((Writer)response.getWriter());
            w.setTidy(true);
            String parentTaskId = request.getParameter("parentTaskId");
            boolean bl = loadFlat = request.getParameter("path") == null;
            if (loadFlat) {
                w.object().key(TaskJSONField.TASKS.getValue());
            }
            String parameter = request.getParameter("checkSubTasks");
            boolean checkSubTasks = false;
            if (parameter != null && Boolean.parseBoolean(parameter)) {
                checkSubTasks = true;
            }
            parameter = request.getParameter("loadTaskStructure");
            boolean loadTaskStructure = false;
            if (parameter != null && Boolean.parseBoolean(parameter)) {
                loadTaskStructure = true;
            }
            boolean loadAllTasks = false;
            String taskStatusTypes = request.getParameter("returnStatusType");
            if (parameter == null && (parameter = request.getParameter("returnCompleted")) != null && Boolean.parseBoolean(parameter)) {
                loadAllTasks = true;
            }
            String taskTypeParameter = request.getParameter("taskType");
            int startIndex = 0;
            int endIndex = -1;
            w.array();
            int taskCount = 0;
            if (taskManager != null) {
                Condition condition;
                Filter filter = new Filter();
                if (taskTypeParameter != null) {
                    filter.setTaskTypes(new String[]{taskTypeParameter});
                }
                filter.setReturnFlatStructure(checkSubTasks);
                filter.setReturnTaskStructure(loadTaskStructure);
                filter.setParentTaskId(parentTaskId);
                if (taskStatusTypes != null) {
                    if ("active".equals(taskStatusTypes)) {
                        condition = new Condition();
                        condition.setComparisonOperator(ComparisonOperator.EQUALS);
                        condition.setComparisonValue((Object)Status.ACTIVE);
                        condition.setPropertyName(TaskProperty.STATUS.getPropertyName());
                        filter.addCondition(new Condition[]{condition});
                    } else if ("complete".equals(taskStatusTypes)) {
                        condition = new Condition();
                        condition.setComparisonOperator(ComparisonOperator.EQUALS);
                        condition.setComparisonValue((Object)Status.COMPLETE);
                        condition.setPropertyName(TaskProperty.STATUS.getPropertyName());
                        filter.addCondition(new Condition[]{condition});
                    } else if (!"all".equals(taskStatusTypes)) {
                        throw new ServletException("Invalid parameter value for parameter: returnStatusType");
                    }
                } else if (!loadAllTasks) {
                    condition = new Condition();
                    condition.setComparisonOperator(ComparisonOperator.EQUALS);
                    condition.setComparisonValue((Object)Status.ACTIVE);
                    condition.setPropertyName(TaskProperty.STATUS.getPropertyName());
                    filter.addCondition(new Condition[]{condition});
                }
                Iterator taskIterator = taskManager.getTasks(filter, startIndex, endIndex);
                if (taskIterator != null) {
                    while (taskIterator.hasNext()) {
                        Task task = (Task)taskIterator.next();
                        TaskServletUtils.writeTaskInfo(w, task);
                        ++taskCount;
                    }
                }
            }
            w.endArray();
            if (loadFlat) {
                w.key(TaskJSONField.RESULTS.getValue()).value((long)taskCount);
                w.endObject();
            }
        }
        catch (TaskManagerException e) {
            throw new ServletException("Failed to retrieve tasklist", (Throwable)e);
        }
        catch (JSONException e) {
            throw new ServletException("Failed to encode tasklist", (Throwable)e);
        }
    }
}