Package org.latexlab.docs.client.events

Source Code of org.latexlab.docs.client.events.Scheduler

package org.latexlab.docs.client.events;

import java.util.HashMap;

import org.latexlab.docs.client.commands.Command;

import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Timer;

/**
* Schedules and manages distinct or repeating events.
*/
public class Scheduler implements HasCommandHandlers {

  private HandlerManager manager;
  private HashMap<String, Timer> timers;
 
  /**
   * Constructs a scheduler.
   */
  public Scheduler() {
  manager = new HandlerManager(this);
  timers = new HashMap<String, Timer>();
  }
 
  @Override
  public HandlerRegistration addCommandHandler(CommandHandler handler) {
  return manager.addHandler(CommandEvent.getType(), handler);
  }
 
  /**
   * Cancels a previously started, repeating task.
   *
   * @param task the name of the task to cancel.
   */
  public void cancelRepeating(String task) {
  if (timers.containsKey(task)) {
    timers.get(task).cancel();
    timers.remove(task);
  }
  }
 
  @Override
  public void fireEvent(GwtEvent<?> event) {
  manager.fireEvent(event);
  }

  /**
   * Schedules a distinct task.
   *
   * @param delayMillis the delay, in milliseconds.
   * @param cmd the task's command.
   */
  public void schedule(int delayMillis, final Command cmd) {
  Timer timer = new Timer() {
    @Override
    public void run() {
    CommandEvent.fire(Scheduler.this, cmd);
    }
  };
  timer.schedule(delayMillis);
  }
 
  /**
   * Schedules a repeating task.
   *
   * @param task the name of the task.
   * @param periodMillis the repeat interval, in milliseconds.
   * @param cmd the task's command.
   */
  public void scheduleRepeating(String task, int periodMillis, final Command cmd) {
  if (timers.containsKey(task)) {
    timers.get(task).cancel();
    timers.remove(task);
  }
  Timer timer = new Timer() {
    @Override
    public void run() {
    CommandEvent.fire(Scheduler.this, cmd);
    }
  };
  timers.put(task, timer);
  timer.scheduleRepeating(periodMillis);
  }
 
}
TOP

Related Classes of org.latexlab.docs.client.events.Scheduler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.