/**
* Copyright 2009 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.waveprotocol.wave.client.scheduler;
import org.waveprotocol.wave.client.scheduler.Scheduler.IncrementalTask;
import org.waveprotocol.wave.client.scheduler.Scheduler.Schedulable;
import org.waveprotocol.wave.client.scheduler.Scheduler.Task;
/**
* An interface for setting up timers that makes testing easier. Production
* implementation uses {@link org.waveprotocol.wave.client.scheduler.Scheduler}
* package. This interface obeys the same contract as does the Scheduler
* interface.
*
*/
public interface TimerService {
/**
* Schedule a task to run once.
*
* @param task Task to schedule.
*/
void schedule(Task task);
/**
* Schedule a process to run continuously over a number of separate time
* slices until completion.
*
* @param process Process to schedule
*/
void schedule(IncrementalTask process);
/**
* Same as {@link #schedule(Task)}, but begin after a minimumTime from now
*
* @param task Task to schedule
* @param minimumTime Must be at least zero
*/
void scheduleDelayed(Task task, int minimumTime);
/**
* Same as {@link #schedule(IncrementalTask)}, but begin after a minimumTime
* from now
*
* @param process Process to schedule
* @param minimumTime Must be at least zero
*/
void scheduleDelayed(IncrementalTask process, int minimumTime);
/**
* Schedule a process to run each unit of work once per given time interval,
* starting at least from the given minimum time from now, until completion
*
* @param process Process to schedule
* @param minimumTime Must be at least zero
* @param interval Must be at least zero
*/
void scheduleRepeating(IncrementalTask process, int minimumTime, int interval);
/**
* Prevent the given job from running. Calling this on a job that is not
* scheduled is a no-op.
*
* @param job
*/
void cancel(Schedulable job);
/**
* @return whether the job was previously scheduled.
*/
boolean isScheduled(Schedulable job);
/**
* @return The number of millisecond elapsed since this service started.
*/
int elapsedMillis();
/**
* @return The current clock time in milliseconds since the UNIX epoch.
* Double is preferred to long due to inefficient long implementation in GWT.
*/
double currentTimeMillis();
}