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

com.espertech.esper.schedule.SchedulingService Maven / Gradle / Ivy

/*
 ***************************************************************************************
 *  Copyright (C) 2006 EsperTech, Inc. All rights reserved.                            *
 *  http://www.espertech.com/esper                                                     *
 *  http://www.espertech.com                                                           *
 *  ---------------------------------------------------------------------------------- *
 *  The software in this package is published under the terms of the GPL license       *
 *  a copy of which has been included with this distribution in the license.txt file.  *
 ***************************************************************************************
 */
package com.espertech.esper.schedule;

import java.util.Collection;

/**
 * Interface for a service that allows to add and remove handles (typically storing callbacks)
 * for a certain time which are returned when
 * the evaluate method is invoked and the current time is on or after the handle's registered time.
 * It is the expectation that the setTime method is called
 * with same or ascending values for each subsequent call. Handles with are triggered are automatically removed
 * by implementations.
 */
public interface SchedulingService extends TimeProvider {
    /**
     * Add a callback for after the given milliseconds from the current time.
     * If the same callback (equals) was already added before, the method will not add a new
     * callback or change the existing callback to a new time, but throw an exception.
     *
     * @param afterMSec    number of millisec to get a callback
     * @param handle       to add
     * @param scheduleSlot allows ordering of concurrent callbacks
     * @throws ScheduleServiceException thrown if the add operation did not complete
     */
    public void add(long afterMSec, ScheduleHandle handle, long scheduleSlot)
            throws ScheduleServiceException;

    /**
     * Remove a handle.
     * If the handle to be removed was not found an exception is thrown.
     *
     * @param handle       to remove
     * @param scheduleSlot for which the callback was added
     * @throws ScheduleServiceException thrown if the callback was not located
     */
    public void remove(ScheduleHandle handle, long scheduleSlot)
            throws ScheduleServiceException;

    /**
     * Set the time based upon which the evaluation of events invokes callbacks.
     *
     * @param timestamp to set
     */
    public void setTime(long timestamp);

    /**
     * Evaluate the current time and add to the collection any handles scheduled for execution.
     *
     * @param handles is a collection of handles populated by the service with any callbacks due
     *                for the current time
     */
    public void evaluate(Collection handles);

    /**
     * Destroy the service.
     */
    public void destroy();

    /**
     * Returns time handle count.
     *
     * @return count
     */
    public int getTimeHandleCount();

    /**
     * Returns furthest in the future handle.
     *
     * @return future handle
     */
    public Long getFurthestTimeHandle();

    /**
     * Returns count of handles.
     *
     * @return count
     */
    public int getScheduleHandleCount();

    /**
     * Returns true if the handle has been scheduled already.
     *
     * @param handle to check
     * @return indicator whether the handle is in use
     */
    public boolean isScheduled(ScheduleHandle handle);
}






© 2015 - 2025 Weber Informatics LLC | Privacy Policy