AbstractWCMProjectProcess.java 7.81 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.cq.projects.api.Project
 *  com.adobe.granite.taskmanagement.TaskManager
 *  com.adobe.granite.workflow.WorkflowException
 *  com.adobe.granite.workflow.WorkflowSession
 *  com.adobe.granite.workflow.exec.WorkItem
 *  com.adobe.granite.workflow.exec.Workflow
 *  com.adobe.granite.workflow.exec.WorkflowData
 *  com.adobe.granite.workflow.exec.WorkflowProcess
 *  com.adobe.granite.workflow.metadata.MetaDataMap
 *  com.day.cq.dam.api.Asset
 *  com.day.cq.dam.api.Rendition
 *  org.apache.commons.lang3.StringUtils
 *  org.apache.sling.api.resource.NonExistingResource
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ValueMap
 *  org.joda.time.DateTime
 *  org.joda.time.format.DateTimeFormatter
 *  org.joda.time.format.ISODateTimeFormat
 */
package com.adobe.cq.projects.wcm.impl.workflow;

import com.adobe.cq.projects.api.Project;
import com.adobe.granite.taskmanagement.TaskManager;
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.Workflow;
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.dam.api.Asset;
import com.day.cq.dam.api.Rendition;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.NonExistingResource;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;

public abstract class AbstractWCMProjectProcess
implements WorkflowProcess {
    protected static DateTimeFormatter TIME_FORMAT = ISODateTimeFormat.dateTime();
    protected static final String META_PROJECT_PATH = "project.path";
    protected static final String META_PROJECT_WORKLINK = "project.workLinkPath";
    protected static final String META_TITLE = "workflowTitle";
    protected static final String META_DUE_DATE = "taskDueDate";
    protected static final String META_LIVE_DATE = "liveDate";
    protected static final String NAME_DESIGN_PACKAGE_PATH = "designPackagePath";
    protected static final String NAME_DAM_DESIGN_PACKAGE_PATH = "damDesignPackagePath";

    protected String getPayloadPath(WorkflowData wfData) {
        String payloadPath = null;
        if (wfData.getPayloadType().equals("JCR_PATH")) {
            payloadPath = (String)wfData.getPayload();
        }
        return payloadPath;
    }

    protected Project getProject(WorkflowData wfData, ResourceResolver resolver) throws WorkflowException {
        Resource projectResource;
        String projectPath = (String)wfData.getMetaDataMap().get("project.path", String.class);
        if (StringUtils.isNotBlank((CharSequence)projectPath) && (projectResource = resolver.getResource(projectPath)) != null && !(projectResource instanceof NonExistingResource)) {
            return (Project)projectResource.adaptTo(Project.class);
        }
        throw new WorkflowException(String.format("Metadata must include project path property in property named: %s", "project.path"));
    }

    protected TaskManager getTaskManager(Resource projectResource) throws WorkflowException {
        Resource projectContent = projectResource.getChild("jcr:content");
        ValueMap valueMap = (ValueMap)projectContent.adaptTo(ValueMap.class);
        String tasksFolderName = (String)valueMap.get("tasks.folder", String.class);
        Resource tasksNode = null;
        if (tasksFolderName != null) {
            tasksNode = projectContent.getChild(tasksFolderName);
        }
        if (tasksNode == null) {
            throw new WorkflowException("Child resource for creating tasks: '" + tasksFolderName + "' does not exist at location: '" + projectContent.getPath() + "'");
        }
        TaskManager taskManager = (TaskManager)tasksNode.adaptTo(TaskManager.class);
        return taskManager;
    }

    protected Resource getProjectWorkLink(WorkflowData wfData, ResourceResolver resolver) {
        String linkPath = (String)wfData.getMetaDataMap().get("project.workLinkPath", String.class);
        if (linkPath != null) {
            return resolver.getResource(linkPath);
        }
        return null;
    }

    protected void updateWorkflowPayload(WorkItem item, WorkflowSession wfSession, String contentPath) throws WorkflowException {
        WorkflowData data = this.cloneWorkflowDataWithNewPayload(wfSession, contentPath, item.getWorkflowData());
        wfSession.updateWorkflowData(item.getWorkflow(), data);
        try {
            Workflow instance = item.getWorkflow();
            Method method = instance.getClass().getMethod("setWorkflowData", WorkflowData.class);
            if (method != null) {
                method.invoke((Object)instance, new Object[]{data});
            }
        }
        catch (Exception e) {
            throw new WorkflowException("failed to update in-memory payload", (Throwable)e);
        }
    }

    private WorkflowData cloneWorkflowDataWithNewPayload(WorkflowSession wfSession, String contentPath, WorkflowData wfToClone) {
        WorkflowData result = wfSession.newWorkflowData("JCR_PATH", (Object)contentPath);
        MetaDataMap sourceMap = wfToClone.getMetaDataMap();
        MetaDataMap targetMap = result.getMetaDataMap();
        for (String key : sourceMap.keySet()) {
            targetMap.put((Object)key, sourceMap.get((Object)key));
        }
        return result;
    }

    protected final String getStringParam(MetaDataMap data, String name, boolean isMandatory, String defaultValue) throws WorkflowException {
        String valueAsString = (String)data.get(name, String.class);
        if (StringUtils.isNotEmpty((CharSequence)valueAsString)) {
            return valueAsString;
        }
        if (isMandatory) {
            throw new WorkflowException("Error during operation. Mandatory parameter is missing: " + name);
        }
        return defaultValue;
    }

    protected final Calendar getCalendarParam(MetaDataMap data, String name, boolean isMandatory, Calendar defaultValue) throws WorkflowException {
        String valueAsString = (String)data.get(name, String.class);
        if (StringUtils.isNotEmpty((CharSequence)valueAsString)) {
            try {
                DateTime dt = TIME_FORMAT.parseDateTime(valueAsString);
                Calendar cal = defaultValue;
                if (dt != null) {
                    cal = Calendar.getInstance();
                    cal.setTime(dt.toDate());
                }
                return cal;
            }
            catch (IllegalArgumentException e) {
                throw new WorkflowException("Error during operation. Unable to parse " + name + ": " + valueAsString);
            }
        }
        if (isMandatory) {
            throw new WorkflowException("Error during operation. Mandatory parameter is missing: " + name);
        }
        return defaultValue;
    }

    protected final String getDesignPackagePath(MetaDataMap data, ResourceResolver resolver) throws WorkflowException {
        String damDesignPackagePath;
        String designPackagePath = this.getStringParam(data, "designPackagePath", false, null);
        if (designPackagePath == null && (damDesignPackagePath = this.getStringParam(data, "damDesignPackagePath", false, null)) != null) {
            Asset asset = (Asset)resolver.getResource(damDesignPackagePath).adaptTo(Asset.class);
            designPackagePath = asset.getOriginal().getPath();
        }
        return designPackagePath;
    }
}