AbsoluteTimeAutoAdvancer.java 3.39 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.workflow.WorkflowException
 *  com.day.cq.workflow.WorkflowSession
 *  com.day.cq.workflow.exec.Route
 *  com.day.cq.workflow.exec.WorkItem
 *  com.day.cq.workflow.exec.WorkflowData
 *  com.day.cq.workflow.exec.WorkflowProcess
 *  com.day.cq.workflow.job.AbsoluteTimeoutHandler
 *  com.day.cq.workflow.metadata.MetaDataMap
 *  com.day.cq.workflow.model.WorkflowNode
 *  com.day.cq.workflow.model.WorkflowTransition
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Service
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.workflow.timeout.autoadvance;

import com.day.cq.workflow.WorkflowException;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.Route;
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.job.AbsoluteTimeoutHandler;
import com.day.cq.workflow.metadata.MetaDataMap;
import com.day.cq.workflow.model.WorkflowNode;
import com.day.cq.workflow.model.WorkflowTransition;
import com.day.cq.workflow.timeout.autoadvance.AutoAdvancer;
import java.util.List;
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.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype=0)
@Service(value={WorkflowProcess.class, AbsoluteTimeoutHandler.class})
@Properties(value={@Property(name="service.description", value={"Workflow Auto Advance Process"}), @Property(name="process.label", value={"Absolute Time Auto Advancer"})})
public class AbsoluteTimeAutoAdvancer
extends AutoAdvancer
implements AbsoluteTimeoutHandler {
    protected final Logger log = LoggerFactory.getLogger(AbsoluteTimeAutoAdvancer.class);

    @Override
    public void execute(WorkItem item, WorkflowSession session, MetaDataMap args) throws WorkflowException {
        try {
            boolean advanced = false;
            List routes = session.getRoutes(item);
            for (Route route : routes) {
                if (!route.hasDefault()) continue;
                String fromTitle = item.getNode().getTitle();
                String toTitle = ((WorkflowTransition)route.getDestinations().get(0)).getTo().getTitle();
                session.complete(item, route);
                this.log.debug(item.getId() + " advanced from " + fromTitle + " to " + toTitle);
                advanced = true;
            }
            if (!advanced) {
                session.complete(item, (Route)routes.get(0));
                String fromTitle = item.getNode().getTitle();
                String toTitle = ((WorkflowTransition)((Route)routes.get(0)).getDestinations().get(0)).getTo().getTitle();
                this.log.debug(item.getId() + " advanced from " + fromTitle + " to " + toTitle);
            }
        }
        catch (WorkflowException e) {
            this.log.error("Could not advance workflow.", (Throwable)e);
        }
    }

    public long getTimeoutDate(WorkItem workItem) {
        Long date = (Long)workItem.getWorkflowData().getMetaDataMap().get("absoluteTime", Long.class);
        return date != null ? date : -1;
    }
}