- use objects and inheritance - enabled combined version for drinking and loading bar without impacting any of them
51 lines
1.7 KiB
Java
51 lines
1.7 KiB
Java
package de.szimnau;
|
|
|
|
import de.szimnau.tools.FormatTools;
|
|
import java.math.BigDecimal;
|
|
import java.math.MathContext;
|
|
import java.time.LocalTime;
|
|
|
|
|
|
public abstract class AbstractProgressBar extends AbstractLoadingBar {
|
|
|
|
protected static final int LINE_LENGTH = 100;
|
|
protected static final BigDecimal ONE_HUNDRED_PERCENT = BigDecimal.valueOf(100);
|
|
|
|
|
|
protected AbstractProgressBar(LocalTime startTime) {
|
|
super(startTime);
|
|
}
|
|
|
|
|
|
protected AbstractProgressBar(LocalTime startTime, LocalTime endTime) {
|
|
super(startTime, endTime);
|
|
}
|
|
|
|
|
|
@Override
|
|
protected String fillLoadingBar(long passedMinutes, boolean progressive) {
|
|
var nonNegativePassedMinutes = BigDecimal.valueOf(passedMinutes < 0 ? 0 : passedMinutes);
|
|
BigDecimal wholePercentage = ONE_HUNDRED_PERCENT
|
|
// kind of reverse dreisatz to avoid having e.g. 99.9999 instead of 100 %
|
|
.multiply(nonNegativePassedMinutes)
|
|
.divide(getTotalMinutesBD(), MathContext.DECIMAL64);
|
|
int numberOfEquals = wholePercentage.intValue();
|
|
var sb = new StringBuilder("[");
|
|
for (int i = 0; i < LINE_LENGTH; i++) {
|
|
if (i < numberOfEquals) {
|
|
sb.append("=");
|
|
} else {
|
|
sb.append("-");
|
|
}
|
|
}
|
|
BigDecimal remainingMinutes = getTotalMinutesBD().subtract(nonNegativePassedMinutes);
|
|
sb.append("] ").append(FormatTools.PERCENTAGE_FORMAT.format(wholePercentage)).append("% ")
|
|
.append(FormatTools.minutesToTimeString(nonNegativePassedMinutes)).append(" - ")
|
|
.append(FormatTools.minutesToTimeString(remainingMinutes));
|
|
if (progressive) {
|
|
sb.append("\r");
|
|
}
|
|
return sb.toString();
|
|
}
|
|
}
|