package org.openbakery.racecontrol.gui.util;
import java.text.MessageFormat;
import org.openbakery.racecontrol.gui.Button;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DurationRunner implements Runnable {
public void setObserver(DurationObserver observer) {
this.observer = observer;
}
private static Logger log = LoggerFactory.getLogger(DurationRunner.class);
private static int SLEEP = 1000;
private Button button;
private String buttonText;
private int timeout;
private long startTime;
private boolean running;
public DurationObserver observer;
public DurationRunner(Button button, String buttonText, int timeout) {
this.button = button;
this.buttonText = buttonText;
this.timeout = timeout;
startTime = System.currentTimeMillis();
running = true;
}
public void run() {
String replaceText = getReplaceText(timeout);
button.setText(MessageFormat.format(buttonText, replaceText));
log.debug("change the message button {}", button.getText());
while (running) {
try {
Thread.sleep(SLEEP);
long currentTime = System.currentTimeMillis();
if ((startTime + timeout - currentTime) < 0) {
running = false;
} else {
String newText = getReplaceText((int) (startTime + timeout - currentTime));
if (!newText.equals(replaceText)) {
replaceText = newText;
button.setText(MessageFormat.format(buttonText, replaceText));
log.debug("change the message button {}", button.getText());
}
}
} catch (InterruptedException e) {
log.error(e.getMessage(), e);
}
}
log.debug("hide the message button {}", button.getText());
button.destroy();
if (observer != null) {
observer.timeExpired(button);
}
}
private String getReplaceText(int time) {
// log.debug("get replace text for {}", time);
if (time > 60000) {
return Integer.toString(time / 60000) + " Minuten";
}
if (time > 10000) {
return Integer.toString(((int) Math.ceil(time / 10000.0)) * 10) + " Sekunden";
}
return Integer.toString((int) Math.ceil(time / 1000.0)) + " Sekunden";
}
public static void main(String[] args) {
Thread thread = new Thread(new DurationRunner(new Button(0, ""), "{0} Pause", 30000));
thread.start();
}
}