package model.time;
import java.text.DecimalFormat;
public abstract class Timer {
private boolean running;
private int secondsCounter;
private int minutesCounter;
private int hoursCounter;
private int dayCounter;
private int monthCounter;
private int yearsCounter;
private DecimalFormat df = new DecimalFormat("00");
/**
* Constructor
*
*/
public Timer() {
running = false;
secondsCounter = 0;
minutesCounter = 0;
hoursCounter = 0;
dayCounter = 0;
monthCounter = 0;
yearsCounter = 0;
}
/**
* starts the timer
*/
public void start() {
this.running = true;
}
/**
* stops the timer
*/
public void stop() {
this.running = false;
}
/**
* true if the timer is running, else false
*/
public boolean isRunning() {
return this.running;
}
/**
* adds one second to the time
*/
public void addASecond() {
secondsCounter++;
if (secondsCounter > 59) {
secondsCounter = 0;
minutesCounter++;
}
if (minutesCounter > 59) {
minutesCounter = 0;
hoursCounter++;
}
if (hoursCounter > 24) {
hoursCounter = 0;
dayCounter++;
}
if (dayCounter > 30) {
dayCounter = 0;
monthCounter++;
}
if (monthCounter > 12) {
monthCounter = 0;
yearsCounter++;
}
}
/**
* substracts a second
*/
public void subtractASecond() {
secondsCounter--;
if (secondsCounter < 0) {
secondsCounter = 59;
minutesCounter--;
}
if (minutesCounter < 00) {
minutesCounter = 59;
hoursCounter--;
}
if (hoursCounter < 0) {
hoursCounter = 23;
dayCounter--;
}
if (dayCounter < 0) {
dayCounter = 29;
monthCounter--;
}
if (monthCounter < 0) {
monthCounter = 12;
yearsCounter--;
}
}
public String getSeconds() {
return df.format(secondsCounter);
}
public String getMinutes() {
return df.format(minutesCounter);
}
public String getHours() {
return df.format(hoursCounter);
}
public String getDays() {
return df.format(dayCounter);
}
public String getMonths() {
return df.format(monthCounter);
}
public String getYears() {
return df.format(yearsCounter);
}
public int getSecondsCount() {
// min = 60, hour = 3600, day = 86400, month = 2592000, year = 946080000
return secondsCounter + (minutesCounter * 60) + (dayCounter * 86400) + (monthCounter * 2592000) + (yearsCounter * 946080000);
}
public void setTime(int seconds, int minutes, int hours, int days, int month, int years) {
this.secondsCounter = seconds;
this.minutesCounter = minutes;
this.hoursCounter = hours;
this.dayCounter = days;
this.monthCounter = month;
this.yearsCounter = years;
}
public void setTime(int seconds) {
this.minutesCounter = seconds / 60;
this.secondsCounter = seconds - 60 * this.minutesCounter;
this.hoursCounter = this.minutesCounter / 60;
this.minutesCounter = this.minutesCounter - 60 * this.hoursCounter;
this.dayCounter = this.hoursCounter / 24;
this.hoursCounter = this.hoursCounter - 24 * this.dayCounter;
this.monthCounter = this.dayCounter / 30;
this.dayCounter = this.dayCounter - 30 * this.monthCounter;
this.yearsCounter = this.monthCounter / 12;
this.monthCounter = this.monthCounter - 12 * this.yearsCounter;
}
/**
* checks if the clock is 0
*
* @return true if it is zero, else false
*/
public boolean isDone() {
return secondsCounter == 0 && minutesCounter == 0 && hoursCounter == 0 && dayCounter == 0 && monthCounter == 0 && yearsCounter == 0;
}
/**
* gets the formatted time
*
* @return the formatted time
*/
abstract public String getformattedString();
}