CreateLandingPageWorkflowProcess.java 7.56 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.cq.projects.api.Project
 *  com.adobe.granite.taskmanagement.Task
 *  com.adobe.granite.taskmanagement.TaskManager
 *  com.adobe.granite.taskmanagement.TaskManagerException
 *  com.adobe.granite.taskmanagement.TaskManagerFactory
 *  com.adobe.granite.workflow.WorkflowException
 *  com.adobe.granite.workflow.WorkflowSession
 *  com.adobe.granite.workflow.exec.WorkItem
 *  com.adobe.granite.workflow.exec.WorkflowData
 *  com.adobe.granite.workflow.exec.WorkflowProcess
 *  com.adobe.granite.workflow.metadata.MetaDataMap
 *  com.day.cq.commons.jcr.JcrUtil
 *  com.day.cq.wcm.api.Page
 *  com.day.cq.wcm.api.PageManager
 *  com.day.cq.wcm.api.PageManagerFactory
 *  com.day.cq.wcm.designimporter.CanvasBuildOptions
 *  com.day.cq.wcm.designimporter.DesignImportResult
 *  com.day.cq.wcm.designimporter.DesignPackageImporter
 *  org.apache.commons.lang3.StringUtils
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.ModifiableValueMap
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.projects.wcm.impl.workflow;

import com.adobe.cq.projects.api.Project;
import com.adobe.cq.projects.wcm.impl.workflow.AbstractWCMProjectProcess;
import com.adobe.granite.taskmanagement.Task;
import com.adobe.granite.taskmanagement.TaskManager;
import com.adobe.granite.taskmanagement.TaskManagerException;
import com.adobe.granite.taskmanagement.TaskManagerFactory;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowData;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.day.cq.commons.jcr.JcrUtil;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import com.day.cq.wcm.api.PageManagerFactory;
import com.day.cq.wcm.designimporter.CanvasBuildOptions;
import com.day.cq.wcm.designimporter.DesignImportResult;
import com.day.cq.wcm.designimporter.DesignPackageImporter;
import java.util.Calendar;
import org.apache.commons.lang3.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Service(value={WorkflowProcess.class})
@Properties(value={@Property(name="service.description", value={"Create Landing Page Workflow Process"}), @Property(name="service.vendor", value={"Adobe"}), @Property(name="process.label", value={"WCM: Create Landing Page Process"})})
public class CreateLandingPageWorkflowProcess
extends AbstractWCMProjectProcess {
    private static final Logger log = LoggerFactory.getLogger(CreateLandingPageWorkflowProcess.class);
    private static final String NAME_PARENT_PATH = "parentPath";
    @Reference
    private PageManagerFactory pageManagerFactory;
    @Reference
    private DesignPackageImporter designPackageImporter;

    public void execute(WorkItem item, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException {
        log.debug("creating landing page for workitem {}", (Object)(item != null ? item.getId() : "<null>"));
        ResourceResolver resourceResolver = (ResourceResolver)workflowSession.adaptTo(ResourceResolver.class);
        MetaDataMap metaData = item.getWorkflowData().getMetaDataMap();
        String contentPath = this.getPayloadPath(item.getWorkflowData());
        if (StringUtils.isEmpty((CharSequence)contentPath)) {
            throw new WorkflowException("Failed to load content path from payload");
        }
        Resource landingResource = resourceResolver.getResource(contentPath);
        if (landingResource == null) {
            throw new WorkflowException("Failed to load content resource from payload");
        }
        String title = this.getStringParam(metaData, "workflowTitle", true, null);
        String parentPath = this.getStringParam(metaData, "parentPath", true, null);
        String designPackagePath = this.getDesignPackagePath(metaData, resourceResolver);
        Calendar liveDate = this.getCalendarParam(metaData, "liveDate", false, null);
        if (liveDate != null) {
            metaData.put((Object)"absoluteTime", (Object)liveDate.getTimeInMillis());
        }
        try {
            Resource projectResource;
            Project project;
            PageManager pm = this.pageManagerFactory.getPageManager(resourceResolver);
            Page landingPage = pm.create(parentPath, JcrUtil.createValidName((String)title), "/libs/wcm/designimporter/templates/importerpage", title);
            this.designPackageImporter.importDesignPackage(landingPage, designPackagePath, null);
            String newPayloadPath = landingPage.getPath();
            this.updateWorkflowPayload(item, workflowSession, newPayloadPath);
            Resource workLinkResource = this.getProjectWorkLink(item.getWorkflowData(), resourceResolver);
            if (workLinkResource != null) {
                ModifiableValueMap valueMap = (ModifiableValueMap)workLinkResource.adaptTo(ModifiableValueMap.class);
                valueMap.put((Object)"suffix", (Object)newPayloadPath);
            }
            if ((projectResource = (Resource)(project = this.getProject(item.getWorkflowData(), resourceResolver)).adaptTo(Resource.class)) != null) {
                TaskManager taskManager = this.getTaskManager(projectResource);
                Task task = taskManager.getTaskManagerFactory().newTask(landingPage.getTitle());
                task.setCurrentAssignee(item.getCurrentAssignee());
                task.setContentPath(newPayloadPath);
                task.setName("Landing Page Creation Complete");
                task.setDescription("The landing page creation has been completed. Please see payload for this task for the final result. An approval process has started.");
                taskManager.createTask(task);
            }
        }
        catch (TaskManagerException e) {
            throw new WorkflowException("Failed to add task to " + landingResource.getPath(), (Throwable)e);
        }
        catch (Exception e) {
            log.error("Error during execution of landing page creation process.", (Throwable)e);
            throw new WorkflowException(e.getMessage());
        }
    }

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

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

    protected void bindDesignPackageImporter(DesignPackageImporter designPackageImporter) {
        this.designPackageImporter = designPackageImporter;
    }

    protected void unbindDesignPackageImporter(DesignPackageImporter designPackageImporter) {
        if (this.designPackageImporter == designPackageImporter) {
            this.designPackageImporter = null;
        }
    }
}