CQWorkflowWrapper.java 9.3 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  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.filter.WorkItemFilter
 *  com.adobe.granite.workflow.metadata.MetaDataMap
 *  com.adobe.granite.workflow.model.WorkflowModel
 *  com.day.cq.workflow.WorkflowException
 *  com.day.cq.workflow.exec.WorkItem
 *  com.day.cq.workflow.exec.Workflow
 *  com.day.cq.workflow.exec.WorkflowData
 *  com.day.cq.workflow.exec.filter.WorkItemFilter
 *  com.day.cq.workflow.metadata.MetaDataMap
 *  com.day.cq.workflow.model.WorkflowModel
 *  javax.jcr.Session
 *  org.apache.sling.api.adapter.AdapterManager
 *  org.apache.sling.jcr.api.SlingRepository
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.workflow.impl.exec;

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.filter.WorkItemFilter;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.day.cq.workflow.WorkflowException;
import com.day.cq.workflow.exec.Workflow;
import com.day.cq.workflow.impl.GraniteWorkItemFilter;
import com.day.cq.workflow.impl.ServiceLoginUtil;
import com.day.cq.workflow.impl.exec.CQWorkItemWrapper;
import com.day.cq.workflow.impl.exec.CQWorkflowDataWrapper;
import com.day.cq.workflow.impl.metadata.CQMetaDataMap;
import com.day.cq.workflow.impl.model.CQWorkflowModelWrapper;
import com.day.cq.workflow.impl.util.LegacyMetaDataWrapperImpl;
import com.day.cq.workflow.model.WorkflowModel;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Dictionary;
import java.util.List;
import javax.jcr.Session;
import org.apache.sling.api.adapter.AdapterManager;
import org.apache.sling.jcr.api.SlingRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CQWorkflowWrapper
implements Workflow,
Serializable {
    public static final String START_COMMENT = "startComment";
    public static final String TERMINATE_COMMENT = "terminateComment";
    private static final Logger log = LoggerFactory.getLogger(CQWorkflowWrapper.class);
    private com.adobe.granite.workflow.exec.Workflow graniteWorkflow;
    private boolean persistantGraniteItem;
    private SlingRepository repository;
    private AdapterManager adapterManager;

    public CQWorkflowWrapper(com.adobe.granite.workflow.exec.Workflow workflow) {
        this(workflow, true, null, null);
    }

    public CQWorkflowWrapper(com.adobe.granite.workflow.exec.Workflow workflow, boolean persistantGraniteItem, SlingRepository repository, AdapterManager adapterManager) {
        if (workflow == null) {
            throw new RuntimeException("Workflow wrappers cannot be instantiated with null values");
        }
        if (!(persistantGraniteItem || repository != null && adapterManager != null)) {
            throw new RuntimeException("Granite item must be persisted if no repository or adapter manager are supplied.");
        }
        this.persistantGraniteItem = persistantGraniteItem;
        this.repository = repository;
        this.adapterManager = adapterManager;
        this.graniteWorkflow = workflow;
    }

    public String getId() {
        return this.graniteWorkflow.getId();
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    public List<com.day.cq.workflow.exec.WorkItem> getWorkItems() {
        ArrayList<com.day.cq.workflow.exec.WorkItem> workItems;
        if (this.persistantGraniteItem) {
            List graniteWorkItems = this.graniteWorkflow.getWorkItems();
            ArrayList<com.day.cq.workflow.exec.WorkItem> workitems = new ArrayList<com.day.cq.workflow.exec.WorkItem>(graniteWorkItems.size());
            for (int i = 0; i < graniteWorkItems.size(); ++i) {
                if (graniteWorkItems.get(i) == null) continue;
                workitems.add(new CQWorkItemWrapper((WorkItem)graniteWorkItems.get(i)));
            }
            return workitems;
        }
        WorkflowSession wfSession = null;
        workItems = new ArrayList<com.day.cq.workflow.exec.WorkItem>();
        try {
            wfSession = this.getWorkflowSession();
            com.adobe.granite.workflow.exec.Workflow wf = wfSession.getWorkflow(this.graniteWorkflow.getId());
            List graniteWorkItems = wf.getWorkItems();
            for (WorkItem wi : graniteWorkItems) {
                if (wi == null) continue;
                workItems.add(new CQWorkItemWrapper(wi, false, this.repository, this.adapterManager));
            }
        }
        catch (com.adobe.granite.workflow.WorkflowException e) {
            log.error("Unable to get work items for workflow {}", (Object)this.graniteWorkflow.getId(), (Object)e);
        }
        finally {
            this.closeSession(wfSession);
        }
        return workItems;
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    public List<com.day.cq.workflow.exec.WorkItem> getWorkItems(com.day.cq.workflow.exec.filter.WorkItemFilter filter) {
        ArrayList<com.day.cq.workflow.exec.WorkItem> workItems;
        if (this.persistantGraniteItem) {
            GraniteWorkItemFilter graniteFilter = new GraniteWorkItemFilter(filter);
            List graniteWorkItems = this.graniteWorkflow.getWorkItems((WorkItemFilter)graniteFilter);
            ArrayList<com.day.cq.workflow.exec.WorkItem> workitems = new ArrayList<com.day.cq.workflow.exec.WorkItem>(graniteWorkItems.size());
            for (int i = 0; i < graniteWorkItems.size(); ++i) {
                if (graniteWorkItems.get(i) == null) continue;
                workitems.add(new CQWorkItemWrapper((WorkItem)graniteWorkItems.get(i)));
            }
            return workitems;
        }
        WorkflowSession wfSession = null;
        workItems = new ArrayList<com.day.cq.workflow.exec.WorkItem>();
        try {
            wfSession = this.getWorkflowSession();
            com.adobe.granite.workflow.exec.Workflow wf = wfSession.getWorkflow(this.graniteWorkflow.getId());
            GraniteWorkItemFilter graniteFilter = new GraniteWorkItemFilter(filter);
            List graniteWorkItems = wf.getWorkItems((WorkItemFilter)graniteFilter);
            for (WorkItem wi : graniteWorkItems) {
                if (wi == null) continue;
                workItems.add(new CQWorkItemWrapper(wi, false, this.repository, this.adapterManager));
            }
        }
        catch (com.adobe.granite.workflow.WorkflowException e) {
            log.error("Unable to get work items for workflow {}", (Object)this.graniteWorkflow.getId(), (Object)e);
        }
        finally {
            this.closeSession(wfSession);
        }
        return workItems;
    }

    public WorkflowModel getWorkflowModel() {
        com.adobe.granite.workflow.model.WorkflowModel graniteWorkflowModel = this.graniteWorkflow.getWorkflowModel();
        if (graniteWorkflowModel != null) {
            return new CQWorkflowModelWrapper(graniteWorkflowModel);
        }
        return null;
    }

    public boolean isActive() {
        return this.graniteWorkflow.isActive();
    }

    public String getState() {
        return this.graniteWorkflow.getState();
    }

    public String getInitiator() {
        return this.graniteWorkflow.getInitiator();
    }

    public Date getTimeStarted() {
        return this.graniteWorkflow.getTimeStarted();
    }

    public Date getTimeEnded() {
        return this.graniteWorkflow.getTimeEnded();
    }

    public com.day.cq.workflow.exec.WorkflowData getWorkflowData() {
        WorkflowData graniteWorkflowData = this.graniteWorkflow.getWorkflowData();
        if (graniteWorkflowData != null) {
            return new CQWorkflowDataWrapper(graniteWorkflowData);
        }
        return null;
    }

    public Dictionary<String, String> getMetaData() {
        MetaDataMap graniteMetaDataMap = this.graniteWorkflow.getMetaDataMap();
        if (graniteMetaDataMap != null) {
            return new LegacyMetaDataWrapperImpl(graniteMetaDataMap);
        }
        return null;
    }

    public com.day.cq.workflow.metadata.MetaDataMap getMetaDataMap() {
        MetaDataMap graniteMetaDataMap = this.graniteWorkflow.getMetaDataMap();
        if (graniteMetaDataMap != null) {
            return new CQMetaDataMap(graniteMetaDataMap);
        }
        return null;
    }

    public com.adobe.granite.workflow.exec.Workflow getGraniteWorkflow(WorkflowSession wfSession) throws WorkflowException {
        if (this.persistantGraniteItem) {
            return this.graniteWorkflow;
        }
        try {
            return wfSession.getWorkflow(this.graniteWorkflow.getId());
        }
        catch (com.adobe.granite.workflow.WorkflowException e) {
            throw new WorkflowException((Throwable)e);
        }
    }

    private WorkflowSession getWorkflowSession() {
        Session session = ServiceLoginUtil.createWorkflowServiceSession(this.repository);
        return (WorkflowSession)this.adapterManager.getAdapter((Object)session, WorkflowSession.class);
    }

    private void closeSession(WorkflowSession wfSession) {
        if (wfSession != null) {
            wfSession.logout();
        }
    }
}