All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.services.simpleworkflow.flow.interceptors.FixedIntervalInvocationSchedule Maven / Gradle / Ivy

package com.amazonaws.services.simpleworkflow.flow.interceptors;

import java.util.Date;

import com.amazonaws.services.simpleworkflow.flow.common.FlowConstants;

/**
 * Schedule that represents invocations with a fixed delay up to a specified expiration interval or count.
 * 
 * @author fateev
 */
public class FixedIntervalInvocationSchedule implements InvocationSchedule {

    protected static final int SECOND = 1000;

    private final long intervalMilliseconds;
    private final long expirationMilliseconds;
    private final int maxInvocationCount;

    public FixedIntervalInvocationSchedule(int intervalSeconds, int expirationSeconds, int maxInvocationCount) {
        this.intervalMilliseconds = intervalSeconds * SECOND;
        this.expirationMilliseconds = expirationSeconds * SECOND;
        this.maxInvocationCount = maxInvocationCount;
    }
    
    public FixedIntervalInvocationSchedule(int intervalSeconds, int expirationSeconds) {
        this.intervalMilliseconds = intervalSeconds * SECOND;
        this.expirationMilliseconds = expirationSeconds * SECOND;
        this.maxInvocationCount = Integer.MAX_VALUE;
    }

    @Override
    public long nextInvocationDelaySeconds(Date currentTime, Date startTime, Date lastInvocationTime, int pastInvocatonsCount) {
        if (pastInvocatonsCount >= maxInvocationCount) {
            return FlowConstants.NONE;
        }
        long resultMilliseconds;
        if (lastInvocationTime == null) {
            resultMilliseconds = startTime.getTime() + intervalMilliseconds - currentTime.getTime();
        }
        else {
            resultMilliseconds = lastInvocationTime.getTime() + intervalMilliseconds - currentTime.getTime();
        }
        if (resultMilliseconds < 0) {
            resultMilliseconds = 0;
        }
        if (currentTime.getTime() + resultMilliseconds - startTime.getTime() >= expirationMilliseconds) {
            return FlowConstants.NONE;
        }
        return resultMilliseconds / SECOND;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy