ProjectWorkListDatasource.java 11.3 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.security.user.UserProperties
 *  com.adobe.granite.security.user.UserPropertiesManager
 *  com.adobe.granite.security.user.UserPropertiesService
 *  com.adobe.granite.ui.components.ds.DataSource
 *  com.adobe.granite.ui.components.ds.SimpleDataSource
 *  com.adobe.granite.ui.components.ds.ValueMapResource
 *  com.adobe.granite.workflow.exec.InboxItem
 *  com.adobe.granite.workflow.exec.WorkItem
 *  com.adobe.granite.workflow.exec.Workflow
 *  com.adobe.granite.workflow.metadata.MetaDataMap
 *  com.adobe.granite.workflow.model.WorkflowModel
 *  com.adobe.granite.workflow.payload.PayloadInfo
 *  com.adobe.granite.workflow.payload.PayloadInfoBuilderManager
 *  javax.jcr.RepositoryException
 *  javax.servlet.ServletException
 *  org.apache.commons.collections.Transformer
 *  org.apache.commons.collections.iterators.TransformIterator
 *  org.apache.commons.lang.StringUtils
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  org.apache.jackrabbit.api.security.user.Authorizable
 *  org.apache.jackrabbit.api.security.user.UserManager
 *  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.resource.ValueMap
 *  org.apache.sling.api.servlets.SlingSafeMethodsServlet
 *  org.apache.sling.api.wrappers.ValueMapDecorator
 */
package com.adobe.cq.projects.impl.servlet;

import com.adobe.cq.projects.impl.servlet.ListItem;
import com.adobe.cq.projects.impl.servlet.ProjectServletUtil;
import com.adobe.cq.projects.impl.servlet.WorkflowListItem;
import com.adobe.cq.projects.impl.util.PagingIterator;
import com.adobe.granite.security.user.UserProperties;
import com.adobe.granite.security.user.UserPropertiesManager;
import com.adobe.granite.security.user.UserPropertiesService;
import com.adobe.granite.ui.components.ds.DataSource;
import com.adobe.granite.ui.components.ds.SimpleDataSource;
import com.adobe.granite.ui.components.ds.ValueMapResource;
import com.adobe.granite.workflow.exec.InboxItem;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.Workflow;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.adobe.granite.workflow.model.WorkflowModel;
import com.adobe.granite.workflow.payload.PayloadInfo;
import com.adobe.granite.workflow.payload.PayloadInfoBuilderManager;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.jcr.RepositoryException;
import javax.servlet.ServletException;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.iterators.TransformIterator;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.UserManager;
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.resource.ValueMap;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.api.wrappers.ValueMapDecorator;

@SlingServlet(methods={"GET"}, resourceTypes={"cq/gui/components/projects/admin/datasource/worklistdatasource"})
public class ProjectWorkListDatasource
extends SlingSafeMethodsServlet {
    @Reference
    private UserPropertiesService upService;

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        int start = 0;
        String startParam = request.getParameter("start");
        if (startParam != null && !startParam.equals("")) {
            start = Integer.valueOf(startParam);
        }
        int limit = -1;
        String limitParam = request.getParameter("limit");
        if (limitParam != null && !limitParam.equals("")) {
            limit = Integer.valueOf(limitParam);
        }
        try {
            final ResourceResolver resourceResolver = request.getResourceResolver();
            final PayloadInfoBuilderManager payloadBuilder = (PayloadInfoBuilderManager)resourceResolver.adaptTo(PayloadInfoBuilderManager.class);
            final UserManager usrMgr = (UserManager)resourceResolver.adaptTo(UserManager.class);
            final UserPropertiesManager userPropertiesManager = this.upService.createUserPropertiesManager(resourceResolver);
            List<ListItem> orderedWorkList = ProjectServletUtil.loadWork(request, request.getParameter("item"), request.getParameter("model"));
            SimpleDataSource ds = new SimpleDataSource(new PagingIterator(new TransformIterator(orderedWorkList.iterator(), new Transformer(){

                public Object transform(Object input) {
                    try {
                        ValueMapDecorator vm = new ValueMapDecorator(new HashMap());
                        WorkflowListItem listItem = (WorkflowListItem)input;
                        Workflow workflow = listItem.getWorkflow();
                        List workItems = workflow.getWorkItems();
                        if (workItems != null && workItems.size() > 0) {
                            WorkItem item = (WorkItem)workItems.get(0);
                            PayloadInfo info = payloadBuilder.getPayloadInfo((InboxItem)item, null);
                            if (StringUtils.isNotBlank((String)info.getDescription())) {
                                vm.put((Object)"payloadSummary.description", (Object)info.getDescription());
                            }
                            if (StringUtils.isNotBlank((String)info.getThumbnailPath())) {
                                vm.put((Object)"payloadSummary.icon", (Object)info.getThumbnailPath());
                            }
                        }
                        vm.put((Object)"instanceTitle", workflow.getMetaDataMap().get("workflowTitle", (Object)""));
                        vm.put((Object)"instanceDescription", workflow.getMetaDataMap().get("startComment", (Object)""));
                        vm.put((Object)"modelDescription", (Object)workflow.getWorkflowModel().getDescription());
                        vm.put((Object)"startDate", (Object)workflow.getTimeStarted().getTime());
                        vm.put((Object)"state", (Object)workflow.getState());
                        Map<String, String> assigneeInfo = ProjectWorkListDatasource.this.getCurrentAssigneeInfo(usrMgr, userPropertiesManager, workflow.getInitiator());
                        vm.put((Object)"initiatorThumbnail", (Object)assigneeInfo.get("currentAssigneeThumbnail"));
                        vm.put((Object)"initiator", (Object)assigneeInfo.get("currentAssignee"));
                        return new ValueMapResource(resourceResolver, workflow.getId(), "cq/gui/components/projects/admin/worklist/workflow/listitem", (ValueMap)vm);
                    }
                    catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                }
            }), start, limit));
            request.setAttribute(DataSource.class.getName(), (Object)ds);
        }
        catch (Exception e) {
            throw new ServletException("Retrieving the work list failed", (Throwable)e);
        }
    }

    protected Map<String, String> getCurrentAssigneeInfo(UserManager usrMgr, UserPropertiesManager userPropertiesManager, String currAssignee) {
        if (currAssignee != null) {
            HashMap<String, String> result = new HashMap<String, String>();
            String currentAssigneeType = "user";
            Authorizable auth = null;
            UserProperties up = null;
            try {
                auth = usrMgr.getAuthorizable(currAssignee);
                if (auth != null) {
                    up = userPropertiesManager.getUserProperties(auth, "profile");
                    String alternateTitle = up.getProperty("alternateTitle");
                    if (StringUtils.isNotBlank((String)alternateTitle)) {
                        currAssignee = alternateTitle;
                    } else {
                        String newAssignee = up.getDisplayName();
                        if (!StringUtils.isBlank((String)newAssignee)) {
                            currAssignee = newAssignee;
                        }
                    }
                }
            }
            catch (RepositoryException e) {
                // empty catch block
            }
            String thumbnailPath = "/libs/granite/security/clientlib/themes/default/resources/sample-user-thumbnail.36.png";
            if (auth != null) {
                thumbnailPath = ProjectServletUtil.getUserThumbnailPath(auth, up);
                if (auth.isGroup()) {
                    currentAssigneeType = "group";
                }
            }
            result.put("participant", currAssignee);
            result.put("currentAssigneeType", currentAssigneeType);
            result.put("currentAssigneeThumbnail", thumbnailPath);
            result.put("currentAssignee", currAssignee);
            return result;
        }
        return null;
    }

    protected void addPayloadInfo(Map<String, String> targetVM, ResourceResolver resolver, InboxItem item, String payloadType) {
        if ("JCR_PATH".equals(payloadType)) {
            PayloadInfoBuilderManager payloadBuilder = (PayloadInfoBuilderManager)resolver.adaptTo(PayloadInfoBuilderManager.class);
            PayloadInfo info = payloadBuilder.getPayloadInfo(item, null);
            if (StringUtils.isNotBlank((String)info.getBrowserPath())) {
                targetVM.put("payload", info.getBrowserPath());
            } else {
                targetVM.put("payload", item.getContentPath());
            }
            String payloadPath = info.getPath();
            Resource res = resolver.getResource(payloadPath);
            if (res != null) {
                String payloadTitle;
                targetVM.put("payloadPath", payloadPath);
                if (StringUtils.isNotBlank((String)info.getDescription())) {
                    targetVM.put("payloadSummary.description", info.getDescription());
                }
                if (StringUtils.isNotBlank((String)info.getThumbnailPath())) {
                    targetVM.put("payloadSummary.icon", info.getThumbnailPath());
                }
                if ((payloadTitle = info.getTitle()) != null) {
                    targetVM.put("payloadTitle", payloadTitle);
                }
            }
        } else if ("URL".equals(payloadType)) {
            String payloadUrl = item.getContentPath();
            targetVM.put("payload", payloadUrl);
            targetVM.put("payloadPath", payloadUrl);
            targetVM.put("payloadTitle", payloadUrl);
            targetVM.put("payloadType", "URL");
        }
    }

    protected void bindUpService(UserPropertiesService userPropertiesService) {
        this.upService = userPropertiesService;
    }

    protected void unbindUpService(UserPropertiesService userPropertiesService) {
        if (this.upService == userPropertiesService) {
            this.upService = null;
        }
    }

}