TranslationSummaryUpdateServlet.java 9.55 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.cq.projects.api.Project
 *  com.adobe.cq.projects.api.ProjectLink
 *  com.adobe.granite.translation.api.TranslationConstants
 *  com.adobe.granite.translation.api.TranslationConstants$TranslationMethod
 *  com.adobe.granite.translation.api.TranslationException
 *  com.adobe.granite.translation.api.TranslationException$ErrorCode
 *  com.adobe.granite.translation.api.TranslationManager
 *  com.adobe.granite.ui.components.HtmlResponse
 *  com.adobe.granite.xss.XSSAPI
 *  com.day.cq.i18n.I18n
 *  javax.servlet.ServletException
 *  javax.servlet.http.HttpServletRequest
 *  javax.servlet.http.HttpServletResponse
 *  org.apache.commons.lang3.StringUtils
 *  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.request.RequestParameter
 *  org.apache.sling.api.resource.ModifiableValueMap
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceResolverFactory
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.wcm.translation.impl.servlet;

import com.adobe.cq.projects.api.Project;
import com.adobe.cq.projects.api.ProjectLink;
import com.adobe.cq.wcm.translation.impl.TranslationPrepareResource;
import com.adobe.cq.wcm.translation.impl.TranslationUtils;
import com.adobe.granite.translation.api.TranslationConstants;
import com.adobe.granite.translation.api.TranslationException;
import com.adobe.granite.translation.api.TranslationManager;
import com.adobe.granite.ui.components.HtmlResponse;
import com.adobe.granite.xss.XSSAPI;
import com.day.cq.i18n.I18n;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
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.request.RequestParameter;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SlingServlet(metatype=0, methods={"POST"}, resourceTypes={"cq/gui/components/projects/admin/pod/translationprojectsummarypod"})
public class TranslationSummaryUpdateServlet
extends SlingAllMethodsServlet {
    private static final long serialVersionUID = -1281094183210677019L;
    private static final Logger LOGGER = LoggerFactory.getLogger(TranslationSummaryUpdateServlet.class);
    @Reference
    private XSSAPI xssAPI;
    @Reference
    private ResourceResolverFactory resolverFactory;
    @Reference
    private TranslationManager translationManager = null;

    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        String operation = request.getParameter(":operation");
        if ("updateTranslationProjectSummary".equals(operation)) {
            this.doOperationUpdateProject(request, response);
        }
    }

    private void doOperationUpdateProject(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException {
        Resource translationSummaryResource = request.getResource();
        ProjectLink link = (ProjectLink)translationSummaryResource.adaptTo(ProjectLink.class);
        Project project = link.getProject();
        I18n i18n = new I18n((HttpServletRequest)request);
        HtmlResponse res = new HtmlResponse(this.xssAPI, i18n, request.getLocale());
        try {
            String strTranslationMethod = request.getParameter("translationMethod");
            TranslationConstants.TranslationMethod translationMethod = TranslationConstants.TranslationMethod.MACHINE_TRANSLATION;
            if (TranslationConstants.TranslationMethod.HUMAN_TRANSLATION.toString().equals(strTranslationMethod)) {
                translationMethod = TranslationConstants.TranslationMethod.HUMAN_TRANSLATION;
            }
            TranslationPrepareResource.setupProjectDetails(project, translationMethod.toString(), request.getParameter("jcr:description"), request.getParameter("destinationLanguage"), request.getParameter("sourceLanguage"), request.getParameter("translationProvider"), request.getParameter("contentCategory"), request.getParameter("translationCloudConfigPath"), request.getParameter("translationCloudConfigName"), request.getParameter("jcr:title"));
            project.setActive(Boolean.parseBoolean(request.getParameter("active")));
            String dueDateString = request.getParameter("project.dueDate");
            Resource projectContent = ((Resource)project.adaptTo(Resource.class)).getChild("jcr:content");
            ModifiableValueMap modifiableValueMap = (ModifiableValueMap)projectContent.adaptTo(ModifiableValueMap.class);
            if (StringUtils.isNotBlank((CharSequence)dueDateString)) {
                try {
                    Calendar dueDate = TranslationUtils.parseDate(dueDateString);
                    modifiableValueMap.put((Object)"project.dueDate", (Object)dueDate);
                }
                catch (ParseException e) {
                    LOGGER.info("invalid due date on project: " + dueDateString);
                }
            } else if (modifiableValueMap.get((Object)"project.dueDate") != null) {
                modifiableValueMap.remove((Object)"project.dueDate");
            }
            TranslationSummaryUpdateServlet.updateProjectCover(request, project);
            TranslationSummaryUpdateServlet.updateProjectTeam(request, project);
            request.getResourceResolver().commit();
            String redirectUrl = request.getParameter(":redirect");
            res.onModified(request.getResource().getPath());
            res.setStatus(200, i18n.get("Project Updated"));
            res.setTitle(i18n.get("Project Updated"));
            res.setDescription(i18n.get("Project {0} has been updated", null, new Object[]{project.getTitle()}));
            res.addRedirectLink(this.xssAPI.getValidHref(redirectUrl), i18n.get("Done"));
            res.send((HttpServletResponse)response, true);
        }
        catch (Exception e) {
            LOGGER.error("Unable to update the project", (Throwable)e);
            res.setGeneralError(500);
            res.setTitle(i18n.get("Project Update Error"));
            res.setDescription(i18n.get("Unable to update the project. <p> {0}", null, new Object[]{i18n.getVar(e.getMessage())}));
            res.setError((Throwable)e);
            res.send((HttpServletResponse)response, true);
        }
    }

    public static void updateProjectTeam(SlingHttpServletRequest request, Project project) throws TranslationException {
        String[] teamMemberUserIds = request.getParameterValues("teamMemberUserId");
        String[] teamMemberRoleIds = request.getParameterValues("teamMemberRoleId");
        if (teamMemberUserIds == null || teamMemberRoleIds == null) {
            throw new TranslationException(I18n.get((HttpServletRequest)request, (String)"Team members and their roles must be specified"), TranslationException.ErrorCode.GENERAL_EXCEPTION);
        }
        TranslationSummaryUpdateServlet.updateProjectTeam(project, teamMemberUserIds, teamMemberRoleIds);
    }

    public static void updateProjectTeam(Project project, String[] teamMemberUserIds, String[] teamMemberRoleIds) {
        List<String> userIds = Arrays.asList(teamMemberUserIds);
        List<String> roleIds = Arrays.asList(teamMemberRoleIds);
        project.updateMembers(userIds, roleIds);
    }

    public static void updateProjectCover(SlingHttpServletRequest request, Project project) throws IOException {
        RequestParameter thumbnailParameter = request.getRequestParameter("coverImage");
        if (thumbnailParameter != null && thumbnailParameter.getSize() > 0) {
            String mimeType = thumbnailParameter.getContentType();
            InputStream thumbnailStream = thumbnailParameter.getInputStream();
            project.setProjectCover(mimeType, thumbnailStream);
        }
    }

    protected void bindXssAPI(XSSAPI xSSAPI) {
        this.xssAPI = xSSAPI;
    }

    protected void unbindXssAPI(XSSAPI xSSAPI) {
        if (this.xssAPI == xSSAPI) {
            this.xssAPI = null;
        }
    }

    protected void bindResolverFactory(ResourceResolverFactory resourceResolverFactory) {
        this.resolverFactory = resourceResolverFactory;
    }

    protected void unbindResolverFactory(ResourceResolverFactory resourceResolverFactory) {
        if (this.resolverFactory == resourceResolverFactory) {
            this.resolverFactory = null;
        }
    }

    protected void bindTranslationManager(TranslationManager translationManager) {
        this.translationManager = translationManager;
    }

    protected void unbindTranslationManager(TranslationManager translationManager) {
        if (this.translationManager == translationManager) {
            this.translationManager = null;
        }
    }
}