SyncTranslationProcess.java 12.6 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.aemds.guide.service.GuideLocalizationService
 *  com.adobe.cq.launches.api.LaunchManagerFactory
 *  com.adobe.cq.projects.api.Project
 *  com.adobe.cq.projects.api.ProjectLink
 *  com.adobe.granite.translation.api.TranslationException
 *  com.adobe.granite.translation.api.TranslationManager
 *  com.adobe.granite.translation.api.xliff.TranslationXLIFFService
 *  com.adobe.granite.translation.core.TranslationCloudConfigUtil
 *  com.adobe.granite.ui.clientlibs.HtmlLibraryManager
 *  com.day.cq.wcm.api.LanguageManager
 *  com.day.cq.wcm.api.PageManagerFactory
 *  com.day.cq.wcm.contentsync.PageExporter
 *  com.day.cq.workflow.WorkflowException
 *  com.day.cq.workflow.WorkflowSession
 *  com.day.cq.workflow.exec.WorkItem
 *  com.day.cq.workflow.exec.WorkflowData
 *  com.day.cq.workflow.exec.WorkflowProcess
 *  com.day.cq.workflow.metadata.MetaDataMap
 *  javax.jcr.Node
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  org.apache.felix.scr.annotations.Activate
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.ReferenceCardinality
 *  org.apache.felix.scr.annotations.ReferencePolicy
 *  org.apache.felix.scr.annotations.ReferencePolicyOption
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceResolverFactory
 *  org.apache.sling.commons.html.HtmlParser
 *  org.apache.sling.jcr.api.SlingRepository
 *  org.osgi.service.component.ComponentContext
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.wcm.translation.impl.process;

import com.adobe.aemds.guide.service.GuideLocalizationService;
import com.adobe.cq.launches.api.LaunchManagerFactory;
import com.adobe.cq.projects.api.Project;
import com.adobe.cq.projects.api.ProjectLink;
import com.adobe.cq.wcm.translation.impl.TranslationPlatformConfiguration;
import com.adobe.cq.wcm.translation.impl.TranslationPodImpl;
import com.adobe.cq.wcm.translation.impl.TranslationRuleConfigurationFile;
import com.adobe.cq.wcm.translation.impl.process.TranslateSitePrepareProcess;
import com.adobe.granite.translation.api.TranslationException;
import com.adobe.granite.translation.api.TranslationManager;
import com.adobe.granite.translation.api.xliff.TranslationXLIFFService;
import com.adobe.granite.translation.core.TranslationCloudConfigUtil;
import com.adobe.granite.ui.clientlibs.HtmlLibraryManager;
import com.day.cq.wcm.api.LanguageManager;
import com.day.cq.wcm.api.PageManagerFactory;
import com.day.cq.wcm.contentsync.PageExporter;
import com.day.cq.workflow.WorkflowException;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.WorkItem;
import com.day.cq.workflow.exec.WorkflowData;
import com.day.cq.workflow.exec.WorkflowProcess;
import com.day.cq.workflow.metadata.MetaDataMap;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathExpressionException;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.ReferencePolicyOption;
import org.apache.felix.scr.annotations.Service;
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.commons.html.HtmlParser;
import org.apache.sling.jcr.api.SlingRepository;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.DOMException;
import org.xml.sax.SAXException;

@Component
@Service(value={WorkflowProcess.class})
public class SyncTranslationProcess
implements WorkflowProcess {
    private static final Logger log = LoggerFactory.getLogger(SyncTranslationProcess.class);
    @Reference
    private TranslationManager translationManager = null;
    @Reference
    private LanguageManager languageManager;
    @Reference
    private TranslationCloudConfigUtil translationCloudConfigUtil = null;
    @Reference
    private SlingRepository repository;
    @Reference
    private ResourceResolverFactory resolverFactory;
    @Reference
    private PageManagerFactory pageManagerFactory = null;
    @Reference
    private HtmlLibraryManager htmlLibraryManager = null;
    @Reference
    LaunchManagerFactory launchesManagerFactory = null;
    @Reference
    private PageExporter pageExporter = null;
    @Reference
    private HtmlParser htmlParser = null;
    @Reference
    private TranslationPlatformConfiguration translationPlatformConfiguration;
    @Reference(policy=ReferencePolicy.DYNAMIC, policyOption=ReferencePolicyOption.RELUCTANT, cardinality=ReferenceCardinality.OPTIONAL_UNARY)
    private TranslationXLIFFService xliffService = null;
    private static String exportFormat = "xml";

    public void execute(WorkItem item, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException {
        log.debug("Translating language copy for workitem {}", (Object)(item != null ? item.getId() : "<null>"));
        Resource translationJobResource = null;
        String destinationPath = null;
        Session userSession = null;
        ResourceResolver resourceResolver = null;
        WorkflowData data = item.getWorkflowData();
        String type = data.getPayloadType();
        try {
            String payloadData;
            resourceResolver = this.resolverFactory.getServiceResourceResolver(Collections.singletonMap("sling.service.subservice", "translation-job"));
            userSession = (Session)resourceResolver.adaptTo(Session.class);
            if (type.equals("JCR_PATH") && data.getPayload() != null && userSession.itemExists(payloadData = (String)data.getPayload())) {
                destinationPath = payloadData;
            }
            if ((translationJobResource = resourceResolver.getResource(destinationPath)) == null) {
                throw new WorkflowException("Failed to load page resource from payload.");
            }
            this.syncTranslationJob(userSession, resourceResolver, this.languageManager, translationJobResource);
        }
        catch (Exception e) {
            log.error("error while tranlating {}", (Throwable)e);
            throw new WorkflowException("Error while translating language copy for " + destinationPath + ".", (Throwable)e);
        }
        finally {
            if (resourceResolver != null && resourceResolver.isLive()) {
                resourceResolver.close();
            }
        }
    }

    @Activate
    private void setup(ComponentContext context) {
        exportFormat = this.translationPlatformConfiguration.getExportFormat();
    }

    private void syncTranslationJob(Session userSession, ResourceResolver resourceResolver, LanguageManager languageManager, Resource translationJobResource) throws IOException, RepositoryException, XPathExpressionException, DOMException, ParserConfigurationException, SAXException, TransformerException, TranslationException {
        ProjectLink link = (ProjectLink)translationJobResource.adaptTo(ProjectLink.class);
        Project project = link.getProject();
        Node translationJobNode = (Node)translationJobResource.adaptTo(Node.class);
        TranslationPodImpl translationJob = new TranslationPodImpl(translationJobNode, translationJobResource, resourceResolver, project, userSession, this.translationManager);
        translationJob.setPageManagerFactory(this.pageManagerFactory);
        translationJob.setResolverFactory(this.resolverFactory);
        TranslationRuleConfigurationFile ruleFile = new TranslationRuleConfigurationFile(resourceResolver, TranslateSitePrepareProcess.getRulesFilePath(), translationJob.getSourceLanguage(), translationJob.getDestinationLanguage(), this.translationManager, this.translationCloudConfigUtil, this.pageManagerFactory, this.htmlLibraryManager, null, languageManager, this.launchesManagerFactory, this.pageExporter, this.htmlParser);
        ruleFile.setExportFormat(exportFormat);
        ruleFile.setXLIFFService(this.xliffService);
        translationJob.syncTranslation(ruleFile, userSession);
    }

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

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

    protected void bindLanguageManager(LanguageManager languageManager) {
        this.languageManager = languageManager;
    }

    protected void unbindLanguageManager(LanguageManager languageManager) {
        if (this.languageManager == languageManager) {
            this.languageManager = null;
        }
    }

    protected void bindTranslationCloudConfigUtil(TranslationCloudConfigUtil translationCloudConfigUtil) {
        this.translationCloudConfigUtil = translationCloudConfigUtil;
    }

    protected void unbindTranslationCloudConfigUtil(TranslationCloudConfigUtil translationCloudConfigUtil) {
        if (this.translationCloudConfigUtil == translationCloudConfigUtil) {
            this.translationCloudConfigUtil = null;
        }
    }

    protected void bindRepository(SlingRepository slingRepository) {
        this.repository = slingRepository;
    }

    protected void unbindRepository(SlingRepository slingRepository) {
        if (this.repository == slingRepository) {
            this.repository = null;
        }
    }

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

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

    protected void bindPageManagerFactory(PageManagerFactory pageManagerFactory) {
        this.pageManagerFactory = pageManagerFactory;
    }

    protected void unbindPageManagerFactory(PageManagerFactory pageManagerFactory) {
        if (this.pageManagerFactory == pageManagerFactory) {
            this.pageManagerFactory = null;
        }
    }

    protected void bindHtmlLibraryManager(HtmlLibraryManager htmlLibraryManager) {
        this.htmlLibraryManager = htmlLibraryManager;
    }

    protected void unbindHtmlLibraryManager(HtmlLibraryManager htmlLibraryManager) {
        if (this.htmlLibraryManager == htmlLibraryManager) {
            this.htmlLibraryManager = null;
        }
    }

    protected void bindLaunchesManagerFactory(LaunchManagerFactory launchManagerFactory) {
        this.launchesManagerFactory = launchManagerFactory;
    }

    protected void unbindLaunchesManagerFactory(LaunchManagerFactory launchManagerFactory) {
        if (this.launchesManagerFactory == launchManagerFactory) {
            this.launchesManagerFactory = null;
        }
    }

    protected void bindPageExporter(PageExporter pageExporter) {
        this.pageExporter = pageExporter;
    }

    protected void unbindPageExporter(PageExporter pageExporter) {
        if (this.pageExporter == pageExporter) {
            this.pageExporter = null;
        }
    }

    protected void bindHtmlParser(HtmlParser htmlParser) {
        this.htmlParser = htmlParser;
    }

    protected void unbindHtmlParser(HtmlParser htmlParser) {
        if (this.htmlParser == htmlParser) {
            this.htmlParser = null;
        }
    }

    protected void bindTranslationPlatformConfiguration(TranslationPlatformConfiguration translationPlatformConfiguration) {
        this.translationPlatformConfiguration = translationPlatformConfiguration;
    }

    protected void unbindTranslationPlatformConfiguration(TranslationPlatformConfiguration translationPlatformConfiguration) {
        if (this.translationPlatformConfiguration == translationPlatformConfiguration) {
            this.translationPlatformConfiguration = null;
        }
    }

    protected void bindXliffService(TranslationXLIFFService translationXLIFFService) {
        this.xliffService = translationXLIFFService;
    }

    protected void unbindXliffService(TranslationXLIFFService translationXLIFFService) {
        if (this.xliffService == translationXLIFFService) {
            this.xliffService = null;
        }
    }
}