WorkflowStatisticsServlet.java 6.75 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.workflow.WorkflowException
 *  com.day.cq.workflow.WorkflowService
 *  com.day.cq.workflow.WorkflowSession
 *  com.day.cq.workflow.model.WorkflowModel
 *  com.day.cq.workflow.statistics.WorkflowStatisticService
 *  javax.jcr.Session
 *  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.Reference
 *  org.apache.felix.scr.annotations.ReferencePolicy
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.request.RequestParameter
 *  org.apache.sling.api.request.RequestPathInfo
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.servlets.SlingSafeMethodsServlet
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.io.JSONWriter
 */
package com.day.cq.workflow.servlet;

import com.day.cq.workflow.WorkflowException;
import com.day.cq.workflow.WorkflowService;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.model.WorkflowModel;
import com.day.cq.workflow.statistics.WorkflowStatisticService;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import javax.jcr.Session;
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.Reference;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.io.JSONWriter;

@Component(metatype=0)
@Service(value={Servlet.class})
@Properties(value={@Property(name="sling.servlet.paths", value={"/libs/cq/workflow/statistics"}), @Property(name="sling.servlet.extensions", value={"json"}), @Property(name="sling.servlet.methods", value={"GET"}), @Property(name="service.description", value={"Workflow Statistics Servlet"})})
public class WorkflowStatisticsServlet
extends SlingSafeMethodsServlet {
    @Reference(policy=ReferencePolicy.STATIC)
    private WorkflowStatisticService statService;
    @Reference(policy=ReferencePolicy.STATIC)
    private WorkflowService wfService;

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        ResourceBundle resourceBundle = request.getResourceBundle(null);
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json");
        WorkflowSession wfSession = null;
        Session session = (Session)request.getResourceResolver().adaptTo(Session.class);
        wfSession = this.wfService.getWorkflowSession(session);
        if (request.getRequestPathInfo().getSelectors().length > 0 && request.getRequestPathInfo().getSelectors()[0].equals("instance")) {
            String modelId = request.getRequestParameter("model") == null ? null : request.getRequestParameter("model").getString();
            ArrayList<WorkflowModel> models = new ArrayList<WorkflowModel>();
            try {
                if (modelId != null) {
                    WorkflowModel model = wfSession.getModel(modelId);
                    if (model != null) {
                        models.add(model);
                    }
                } else {
                    models.addAll(Arrays.asList(wfSession.getModels()));
                }
            }
            catch (WorkflowException e) {
                throw new ServletException("Statistics: failed to retrieve workflow models", (Throwable)e);
            }
            try {
                JSONWriter writer = new JSONWriter((Writer)response.getWriter());
                writer.object();
                writer.key("instances");
                writer.array();
                for (WorkflowModel model : models) {
                    writer.object();
                    Map stats = this.statService.getInstanceReport(session, model);
                    writer.key(model.getId());
                    writer.object();
                    for (Object key : stats.keySet()) {
                        writer.key((String)key).value(stats.get(key));
                    }
                    writer.endObject();
                    writer.endObject();
                }
                writer.endArray();
                writer.key("results").value((long)models.size());
                writer.endObject();
            }
            catch (JSONException e) {
                throw new ServletException((Throwable)e);
            }
        }
        if (request.getRequestPathInfo().getSelectors().length == 0) {
            try {
                Map wfStat = this.statService.getReport(session);
                JSONWriter writer = new JSONWriter((Writer)response.getWriter());
                writer.object();
                writer.key("workflow");
                writer.array();
                for (Object key : wfStat.keySet()) {
                    writer.object();
                    writer.key((String)key).value(wfStat.get(key));
                    writer.endObject();
                }
                writer.endArray();
                writer.key("results").value((long)wfStat.size());
                writer.endObject();
            }
            catch (JSONException e) {
                throw new ServletException((Throwable)e);
            }
        }
    }

    protected void bindStatService(WorkflowStatisticService workflowStatisticService) {
        this.statService = workflowStatisticService;
    }

    protected void unbindStatService(WorkflowStatisticService workflowStatisticService) {
        if (this.statService == workflowStatisticService) {
            this.statService = null;
        }
    }

    protected void bindWfService(WorkflowService workflowService) {
        this.wfService = workflowService;
    }

    protected void unbindWfService(WorkflowService workflowService) {
        if (this.wfService == workflowService) {
            this.wfService = null;
        }
    }
}