SelectedTraitsServlet.java 5.94 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.security.user.UserManagementService
 *  com.adobe.granite.security.user.UserProperties
 *  com.adobe.granite.security.user.UserPropertiesManager
 *  com.adobe.granite.security.user.UserPropertiesService
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.servlet.ServletException
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  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.JSONObject
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.aam;

import com.adobe.granite.security.user.UserManagementService;
import com.adobe.granite.security.user.UserProperties;
import com.adobe.granite.security.user.UserPropertiesManager;
import com.adobe.granite.security.user.UserPropertiesService;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
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.ResourceResolver;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.servlet.ServletException;
import java.io.IOException;

@Component(metatype=0, immediate=1)
@SlingServlet(extensions={"json"}, methods={"GET", "POST"}, resourceTypes={"cq/personalization/audiencemanager/components/contextstores/audiencemanager"}, generateComponent=0)
public class SelectedTraitsServlet
extends SlingAllMethodsServlet {
    private static final String P_SELECTED_TRAITS = "selectedTraits";
    private static final long serialVersionUID = 7394480208833235833L;
    private static final String AUDIENCE_REL_PATH = "profile/audiencemanager";
    @Reference
    private UserPropertiesService usrPropsSvc;
    @Reference
    private UserManagementService usrMgtSrv;
    private static final Logger LOGGER = LoggerFactory.getLogger(SelectedTraitsServlet.class);

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json; charset=utf-8");
        try {
            ResourceResolver rr = request.getResourceResolver();
            String authorizableId = this.getAuthorizableId(request);
            UserPropertiesManager usrPropMgr = this.usrPropsSvc.createUserPropertiesManager(rr);
            UserProperties ammProfile = usrPropMgr.getUserProperties(authorizableId, "profile/audiencemanager");
            JSONObject jsonObject = new JSONObject();
            if (ammProfile != null && ammProfile.getNode().hasProperty("selectedTraits")) {
                jsonObject.put("selectedTraits", (Object)ammProfile.getProperty("selectedTraits"));
            }
            response.getWriter().write(jsonObject.toString());
        }
        catch (RepositoryException e) {
            throw new ServletException(e.getMessage(), (Throwable)e);
        }
        catch (JSONException e) {
            throw new ServletException(e.getMessage(), (Throwable)e);
        }
    }

    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        try {
            ResourceResolver rr = request.getResourceResolver();
            String authorizableId = this.getAuthorizableId(request);
            String selectedTraits = request.getParameter("selectedTraits");
            UserPropertiesManager usrPropMgr = this.usrPropsSvc.createUserPropertiesManager(rr);
            UserProperties ammProfile = usrPropMgr.getUserProperties(authorizableId, "profile/audiencemanager");
            if (ammProfile == null) {
                ammProfile = usrPropMgr.createUserProperties(authorizableId, "profile/audiencemanager");
            }
            Node ammProfileNode = ammProfile.getNode();
            ammProfileNode.setProperty("selectedTraits", selectedTraits);
            ammProfileNode.getSession().save();
            response.setContentType("application/json; charset=utf-8");
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("selectedTraits", (Object)selectedTraits);
            response.getWriter().write(jsonObject.toString());
        }
        catch (RepositoryException e) {
            LOGGER.debug(e.getMessage(), (Throwable)e);
            response.sendError(403);
        }
        catch (JSONException e) {
            throw new ServletException(e.getMessage(), (Throwable)e);
        }
    }

    private String getAuthorizableId(SlingHttpServletRequest request) {
        String id = request.getParameter("authorizableId");
        if (id == null || id.isEmpty()) {
            return this.usrMgtSrv.getAnonymousId();
        }
        return id;
    }

    protected void bindUsrPropsSvc(UserPropertiesService userPropertiesService) {
        this.usrPropsSvc = userPropertiesService;
    }

    protected void unbindUsrPropsSvc(UserPropertiesService userPropertiesService) {
        if (this.usrPropsSvc == userPropertiesService) {
            this.usrPropsSvc = null;
        }
    }

    protected void bindUsrMgtSrv(UserManagementService userManagementService) {
        this.usrMgtSrv = userManagementService;
    }

    protected void unbindUsrMgtSrv(UserManagementService userManagementService) {
        if (this.usrMgtSrv == userManagementService) {
            this.usrMgtSrv = null;
        }
    }
}