org.dashbuilder.scheduler.SchedulerTask Maven / Gradle / Ivy
/**
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
*
* 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.dashbuilder.scheduler;
import java.text.MessageFormat;
import java.util.Date;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* A scheduler task is a job to be executed in the future.
*/
public abstract class SchedulerTask implements Runnable {
protected ScheduledFuture future = null;
protected boolean running = false;
protected boolean fixedDelay = false;
protected long fixedDelaySeconds = -1;
public abstract String getKey();
public abstract String getDescription();
public abstract void execute();
public boolean isRunning() {
return running;
}
public boolean isFixedDelay() {
return fixedDelay;
}
public long getFixedDelaySeconds() {
return fixedDelaySeconds;
}
public void setFixedDelaySeconds(long fixedDelaySeconds) {
this.fixedDelaySeconds = fixedDelaySeconds;
}
public boolean isCancelled() {
return future != null && future.isCancelled();
}
public boolean isDone() {
return future != null && future.isDone();
}
public boolean isMisfired() {
return !running && future != null && future.getDelay(TimeUnit.MILLISECONDS) < 0;
}
public void run() {
try {
running = true;
execute();
} finally {
running = false;
}
}
public void cancel() {
if (future != null) {
future.cancel(false);
}
}
public String printTimeToFire() {
if (future != null) {
long millis = future.getDelay(TimeUnit.MILLISECONDS);
return formatTime(millis);
}
return null;
}
public long getMillisTimeToFire() {
if (future != null) {
return future.getDelay(TimeUnit.MILLISECONDS);
}
return 0;
}
public Date getFireDate() {
long delay = getMillisTimeToFire();
if (delay < 0) return null;
return new Date(System.currentTimeMillis() + delay);
}
public static String formatTime(long millis) {
long milliseconds = millis;
long seconds = milliseconds / 1000; milliseconds %= 1000;
long minutes = seconds / 60; seconds %= 60;
long hours = minutes / 60; minutes %= 60;
long days = hours / 24; hours %= 24;
long weeks = days / 7; days %= 7;
String pattern = "{2}h {1}m {0}s";
if (days > 0) pattern = "{3}d {2}h {1}m {0}s";
if (weeks > 0) pattern = "{4} sem. {3}d {2}h {1}m {0}s";
return MessageFormat.format(pattern, new Long[] {new Long(seconds), new Long(minutes), new Long(hours), new Long(days), new Long(weeks)});
}
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append("key=").append(getKey()).append(", ");
buf.append(getDescription());
return buf.toString();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy