diff --git a/LoadingBar.java b/LoadingBar.java index ede659f..7727275 100644 --- a/LoadingBar.java +++ b/LoadingBar.java @@ -1,14 +1,18 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.IOException; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import java.nio.charset.StandardCharsets; import java.text.DecimalFormat; -import java.time.LocalTime; import java.time.format.DateTimeFormatter; +import java.time.LocalTime; import java.time.temporal.ChronoUnit; import java.util.Arrays; +import java.util.concurrent.TimeUnit; import java.util.List; import java.util.Objects; -import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -60,13 +64,79 @@ public class LoadingBar { } - public static void main(String[] args) { - if (args.length > 0 && Objects.equals(args[0], "--help")) { + public static void main(String[] args) throws IOException { + if (args.length == 0) { + askParametersAndRun(); + } else { + parseParametersAndRun(args); + } + } + + + private static void askParametersAndRun() throws IOException { + var br = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); + System.out.print("Ankunftszeit: "); + String startTimeRaw = br.readLine(); + var startTime = LocalTime.parse(startTimeRaw, TIME_FORMATTER); + handleMittagspause(br, startTime); + handleZapfenstreich(br, startTime); + } + + + + private static void handleMittagspause(BufferedReader br, LocalTime startTime) throws IOException { + System.out.print("Mittagspause verschieben um (optional): "); + String mittagspauseOffsetRaw = br.readLine(); + if (mittagspauseOffsetRaw != null && !mittagspauseOffsetRaw.isBlank()) { + var mittagspauseOffset = Integer.parseInt(mittagspauseOffsetRaw); + showLoadingBarMittagspause(startTime, mittagspauseOffset); + return; + } + System.out.print("Mittagspause um (optional): "); + String manualMittagspauseRaw = br.readLine(); + if (mittagspauseOffsetRaw != null && !mittagspauseOffsetRaw.isBlank()) { + var manualMittagspause = LocalTime.parse(manualMittagspauseRaw, TIME_FORMATTER); + showLoadingBarMittagspause(startTime, manualMittagspause); + } else { + showLoadingBarMittagspause(startTime); + } + } + + + private static void handleZapfenstreich(BufferedReader br, LocalTime startTime) throws IOException { + System.out.print("Mittagspause hat gedauert (optional): "); + String mittagspauseDurationRaw = br.readLine(); + Integer mittagspauseDuration = null; + if (mittagspauseDurationRaw != null && !mittagspauseDurationRaw.isBlank()) { + mittagspauseDuration = Integer.valueOf(mittagspauseDurationRaw); + } + System.out.print("Feierabend verschieben um (optional): "); + String zapfenstreichOffsetRaw = br.readLine(); + Integer zapfenstreichOffset = null; + if (zapfenstreichOffsetRaw != null && !zapfenstreichOffsetRaw.isBlank()) { + zapfenstreichOffset = Integer.valueOf(zapfenstreichOffsetRaw); + showLoadingBarZapfenstreich(startTime, mittagspauseDuration, zapfenstreichOffset); + return; + } + System.out.print("Manuelle Uhrzeit Feierabend (optional): "); + String manualZapfenstreichRaw = br.readLine(); + LocalTime manualZapfenstreich = null; + if (manualZapfenstreichRaw != null && !manualZapfenstreichRaw.isBlank()) { + manualZapfenstreich = LocalTime.parse(manualZapfenstreichRaw, TIME_FORMATTER); + showLoadingBarZapfenstreich(startTime, mittagspauseDuration, manualZapfenstreich); + return; + } + showLoadingBarZapfenstreich(startTime, mittagspauseDuration); + } + + + private static void parseParametersAndRun(String[] args) { + String nextArg = args[0]; + if ("--help".equals(nextArg)) { printHelp(); return; } verifyMinimumNumberOfArgs(args); - String nextArg = args[0]; verifyTimeFormat(nextArg, "Erstes Argument"); var startTime = LocalTime.parse(nextArg, TIME_FORMATTER); nextArg = args[1]; @@ -91,13 +161,12 @@ public class LoadingBar { return; } verifyTimeFormat(nextArg, "Argument nach " + DaySection.MITTAG.getParam()); - var maxMittagspause = LocalTime.parse(nextArg, TIME_FORMATTER); - showLoadingBarMittagspause(startTime, maxMittagspause); + var manualMittagspause = LocalTime.parse(nextArg, TIME_FORMATTER); + showLoadingBarMittagspause(startTime, manualMittagspause); } private static void handleZapfenstreich(String[] args, LocalTime startTime) { - Integer lunchDuration = null; if (args.length == 2) { showLoadingBarZapfenstreich(startTime); return; @@ -105,6 +174,7 @@ public class LoadingBar { String nextArg = args[2]; LocalTime maxZapfenstreich = null; int endTimeOffset = 0; + Integer lunchDuration = null; if (TIME_PATTERN.matcher(nextArg).matches()) { maxZapfenstreich = LocalTime.parse(nextArg, TIME_FORMATTER); } else if (OFFSET_PATTERN.matcher(nextArg).matches()) {