Package hu.lacimol.tutorial.todo.scheduling

Source Code of hu.lacimol.tutorial.todo.scheduling.TodoMonitorImpl

package hu.lacimol.tutorial.todo.scheduling;

import hu.lacimol.tutorial.todo.service.TodoService;
import hu.lacimol.tutorial.todo.util.GlobalSettings;

import java.util.Date;
import java.util.HashMap;

import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.atlassian.sal.api.lifecycle.LifecycleAware;
import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory;
import com.atlassian.sal.api.scheduling.PluginScheduler;

public class TodoMonitorImpl implements TodoMonitor, LifecycleAware {
 
  private static final Logger logger = LoggerFactory.getLogger(TodoMonitorImpl.class);
  private static final String JOB_NAME = TodoMonitorImpl.class.getName() + ":job";
 
  private final PluginScheduler pluginScheduler;
  private final TodoService todoService;
  private final GlobalSettings settings;
 
  private final HashMap<String, Object> jobDataMap = new HashMap<String, Object>();
 
  private Date lastRun;
  private Date nextRun;
  private long interval = 0;
 
  public TodoMonitorImpl(PluginScheduler pluginScheduler, TodoService todoService,
      PluginSettingsFactory pluginSettingsFactory) {
   
    this.pluginScheduler = pluginScheduler;
    this.todoService = todoService;
    this.settings = new GlobalSettings(pluginSettingsFactory.createGlobalSettings());
   
    Long loadInterval = this.settings.loadInterval();
    if (loadInterval != null) {
      this.interval = loadInterval;
    }
   
  }
 
  @Override
  public void onStart() {
   
    this.jobDataMap.put("TodoMonitorImpl:instance", TodoMonitorImpl.this);
    this.jobDataMap.put("TodoService", this.todoService);
   
    if (this.interval > 0) {
      schedule();
    }
  }
 
  @Override
  public void reschedule(long interval) {
    this.interval = interval;
    this.settings.storeInterval(interval);
    this.schedule();
  }
 
  private void schedule() {
    DateTime startTime = this.lastRun == null ? DateTime.now() : new DateTime(this.lastRun);
    this.pluginScheduler.scheduleJob(JOB_NAME, TodoTask.class, this.jobDataMap, startTime.toDate(), this.interval);
    this.setNextRun(startTime.plus(this.interval).toDate());
    logger.info(String.format("TodoMonitorImpl scheduled to run every %d ms", this.interval));
  }
 
  @Override
  public void setLastRun(Date lastRun) {
    this.lastRun = lastRun;
  }
 
  @Override
  public Date getLastRun() {
    return this.lastRun;
  }
 
  @Override
  public Date getNextRun() {
    return this.nextRun;
  }
 
  @Override
  public void setNextRun(Date nextRun) {
    this.nextRun = nextRun;
  }
 
  @Override
  public long getInterval() {
    return this.interval;
  }
 
  @Override
  public int getTodoSize() {
    return this.todoService.findAll().size();
  }
 
}
TOP

Related Classes of hu.lacimol.tutorial.todo.scheduling.TodoMonitorImpl

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.