Files
JavaUtils/zeitlaeufer/src/main/java/de/szimnau/AbstractProgressBar.java
fabianArbeit eed441343c new project structure
- use objects and inheritance
- enabled combined version for drinking and loading bar without impacting any of them
2025-07-30 13:42:18 +02:00

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();
}
}