/** * @version $Id: RepeatJob.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2012/01/25 14:30:09 * @author kousuke-morishima * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.jobs.Job; /** * 繰り返し処理を行うときに使用するJob. * 実行する処理と、繰り返し間隔を指定できる。処理が終了してから、指定した間隔だけ時間をおいて次の処理が実行される。 * * @author kousuke-morishima */ public abstract class RepeatJob extends Job { private long delay; private boolean shouldSchedule = true; /** * インターバルをデフォルトで設定せずにインスタンス化する。別途インターバルを設定しないと実行できない。 * * @param name * 処理名 */ public RepeatJob(String name) { super(name); setInterval(-1); } /** * インターバルを設定してインスタンス化する * * @param name * 処理名 * @param interval * デフォルトのインターバル。非負。 */ public RepeatJob(String name, long interval) { super(name); setInterval(interval); } @Override protected IStatus run(IProgressMonitor monitor) { IStatus status = doRun(monitor); Assert.isLegal(getInterval() >= 0); // Assert schedule(getInterval()); return status; } abstract protected IStatus doRun(IProgressMonitor monitor); /** * @return 処理の実行間隔 */ public long getInterval() { return delay; } /** * @param interval * 処理間隔(ms) */ public void setInterval(long interval) { this.delay = interval; } @Override public boolean shouldSchedule() { return shouldSchedule; } /** * 繰り返し処理を止める */ public void stop() { shouldSchedule = false; } }