new project structure

- use objects and inheritance
- enabled combined version for drinking and loading bar without impacting any of them
This commit is contained in:
2025-07-30 13:42:18 +02:00
parent 84a2a94064
commit eed441343c
8 changed files with 925 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
package de.szimnau;
import de.szimnau.tools.FormatTools;
import java.time.LocalTime;
import java.util.*;
import static de.szimnau.tools.CommonTools.println;
public class SimpleLoadingBar extends AbstractProgressBar {
private final String title;
private SimpleLoadingBar(LocalTime startTime, LocalTime endTime, String title) {
super(startTime, endTime);
this.title = initTitle(title);
}
public static void main(String[] args) {
if (args.length > 0 && Objects.equals(args[0], "--help")) {
printHelp();
return;
}
verifyMinimumNumberOfArgs(args);
String nextArg = args[0];
verifyTimeFormat(nextArg, "Erstes Argument");
var firstTime = LocalTime.parse(nextArg, FormatTools.TIME_FORMATTER);
LocalTime startTime = null;
String title = "";
LocalTime endTime = null;
if (args.length > 1) {
nextArg = args[1];
if ("-msg".equals(nextArg)) {
title = args.length > 2 ? args[2] : title;
} else {
verifyTimeFormat(nextArg, "Zweites Argument");
endTime = LocalTime.parse(nextArg, FormatTools.TIME_FORMATTER);
}
}
if (endTime == null) {
startTime = LocalTime.now();
endTime = firstTime;
} else {
startTime = firstTime;
}
if (args.length == 2 || !title.isBlank()) {
new SimpleLoadingBar(startTime, endTime, title).showLoadingBar();
return;
}
// if there are 3 arguments, the third will be discarded.
boolean hasTitleArg = args.length > 3 && "-msg".equals(args[2]);
title = hasTitleArg ? args[3] : title;
new SimpleLoadingBar(startTime, endTime, title).showLoadingBar();
}
private static void printHelp() {
println("Mögliche Argumente für LoadingBar:\n"
+ "Startzeit, Endzeit, Endnachricht (Optional)\n"
+ FormatTools.TIME_FORMAT + " " + FormatTools.TIME_FORMAT + " -msg <Nachricht>\n"
+ "Endzeit (Startzeit = jetzt), Endnachricht (Optional)\n"
+ FormatTools.TIME_FORMAT + " -msg <Nachricht>\n"
);
}
private static void verifyMinimumNumberOfArgs(String[] args) {
if (args.length >= 1) {
return;
}
println("Mindestens 1 Argument muss gegeben sein.");
printHelp();
System.exit(1);
}
private static void verifyTimeFormat(String param, String errMsgPrefix) {
if (FormatTools.TIME_PATTERN.matcher(param).matches()) {
return;
}
println(errMsgPrefix + " \"" + param + "\" muss Uhrzeitformat (" + FormatTools.TIME_FORMAT + ") entsprechen.");
System.exit(1);
}
private String initTitle(String inputTitle) {
String fallbackTitle = "Ende! Endzeit " + FormatTools.TIME_FORMATTER.format(getEndTime()) + " erreicht.";
String effectiveTitle = inputTitle == null || inputTitle.isBlank() ? fallbackTitle : inputTitle;
String separator = "*".repeat(effectiveTitle.length());
return separator + "\n" + effectiveTitle + "\n" + separator;
}
@Override
protected void showLoadingBar() {
showLoadingBar();
// showLoadingBarDebug(); // DEBUG
println(title);
}
private String formatTitle(String title) {
String separator = "*".repeat(title.length());
return separator + "\n" + title + "\n" + separator;
}
}