ProjectRoleDataSource.java 7.29 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.cq.projects.api.Project
 *  com.adobe.cq.projects.api.ProjectMemberRole
 *  com.adobe.granite.ui.components.ds.DataSource
 *  com.adobe.granite.ui.components.ds.SimpleDataSource
 *  com.adobe.granite.ui.components.ds.ValueMapResource
 *  com.day.cq.wcm.api.Template
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.servlet.ServletException
 *  org.apache.commons.collections.Transformer
 *  org.apache.commons.collections.iterators.TransformIterator
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  org.apache.jackrabbit.api.security.user.Group
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.request.RequestPathInfo
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 *  org.apache.sling.api.wrappers.ValueMapDecorator
 */
package com.adobe.cq.projects.impl.team;

import com.adobe.cq.projects.api.Project;
import com.adobe.cq.projects.api.ProjectMemberRole;
import com.adobe.cq.projects.impl.team.Team;
import com.adobe.cq.projects.impl.team.TeamException;
import com.adobe.cq.projects.impl.team.TeamManager;
import com.adobe.cq.projects.impl.team.TeamManagerFactory;
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.day.cq.wcm.api.Template;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.servlet.ServletException;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.iterators.TransformIterator;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.jackrabbit.api.security.user.Group;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestPathInfo;
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.SlingAllMethodsServlet;
import org.apache.sling.api.wrappers.ValueMapDecorator;

@SlingServlet(methods={"GET"}, resourceTypes={"cq/gui/components/projects/admin/datasource/projectroledatasource"})
public class ProjectRoleDataSource
extends SlingAllMethodsServlet {
    @Reference
    TeamManagerFactory teamManagerFactory;

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        final ResourceResolver resolver = request.getResourceResolver();
        ArrayList<ItemHolder> roles = new ArrayList<ItemHolder>();
        Template template = null;
        if (request.getParameter("template") != null) {
            String templatePath = request.getParameter("template");
            Resource templateResource = resolver.getResource(templatePath);
            template = (Template)templateResource.adaptTo(Template.class);
        }
        String projectPath = null;
        Project project = null;
        if (template == null) {
            Resource resource;
            projectPath = request.getParameter("item") != null ? request.getParameter("item") : request.getRequestPathInfo().getSuffix();
            if (projectPath != null) {
                resource = resolver.getResource(projectPath);
                if (resource == null) {
                    throw new ServletException("Could not load project resource for path" + projectPath);
                }
                project = (Project)resource.adaptTo(Project.class);
                template = (Template)project.adaptTo(Template.class);
            } else {
                resource = request.getResource();
                if (resource != null && (project = (Project)resource.adaptTo(Project.class)) != null) {
                    template = (Template)project.adaptTo(Template.class);
                    projectPath = resource.getPath();
                }
            }
        }
        if (template == null) {
            throw new ServletException("Could not determine template for project");
        }
        try {
            TeamManager teamManager = this.teamManagerFactory.createTeamManager((Session)resolver.adaptTo(Session.class), template);
            Team projectTeam = null;
            if (projectPath != null) {
                projectTeam = teamManager.getTeam(project);
            }
            Map<String, ProjectMemberRole> teamRoles = teamManager.getRoles();
            Iterator<ProjectMemberRole> rolesIterator = teamRoles.values().iterator();
            while (rolesIterator.hasNext()) {
                Group roleGroup;
                ItemHolder item = new ItemHolder();
                ProjectMemberRole role = rolesIterator.next();
                item.value = role.getId();
                item.text = role.getDisplayName();
                if (projectTeam != null && (roleGroup = projectTeam.getGroup(role)) != null) {
                    String groupId = null;
                    try {
                        groupId = roleGroup.getID();
                    }
                    catch (RepositoryException e) {
                        // empty catch block
                    }
                    item.groupId = groupId;
                }
                roles.add(item);
            }
            Iterator results = roles.iterator();
            SimpleDataSource ds = new SimpleDataSource((Iterator)new TransformIterator(results, new Transformer(){

                public Object transform(Object input) {
                    try {
                        ItemHolder role = (ItemHolder)input;
                        ValueMapDecorator vm = new ValueMapDecorator(new HashMap());
                        vm.put((Object)"value", (Object)role.value);
                        vm.put((Object)"text", (Object)role.text);
                        vm.put((Object)"groupId", (Object)(role.groupId != null ? role.groupId : ""));
                        return new ValueMapResource(resolver, "/roles/" + role.value, "nt:unstructured", (ValueMap)vm);
                    }
                    catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                }
            }));
            request.setAttribute(DataSource.class.getName(), (Object)ds);
        }
        catch (TeamException e) {
            throw new ServletException("Team Exception", (Throwable)e);
        }
    }

    protected void bindTeamManagerFactory(TeamManagerFactory teamManagerFactory) {
        this.teamManagerFactory = teamManagerFactory;
    }

    protected void unbindTeamManagerFactory(TeamManagerFactory teamManagerFactory) {
        if (this.teamManagerFactory == teamManagerFactory) {
            this.teamManagerFactory = null;
        }
    }

    private class ItemHolder {
        String text;
        String value;
        String groupId;

        private ItemHolder() {
        }
    }

}