From d62a2af2eed0788eb8e6891b59911792c1f6f84dcc6875e44d3c06c12f6b733a Mon Sep 17 00:00:00 2001 From: Minimons Date: Tue, 23 Jun 2026 13:51:15 +0200 Subject: [PATCH] 12: Extend parsing of persistent alarms with graceperiods --- .../impl/ref/AlarmConfigurationParser.tjava | 57 ++++++++++++++++++- .../impl/ref/PriceAlarmDefinition.tjava | 2 +- .../impl/ref/TriggerConfiguration.java | 2 + 3 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/TriggerConfiguration.java diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava index d67dacc..f0f97ba 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava @@ -59,8 +59,8 @@ public final class AlarmConfigurationParser { BigDecimal target = parseTarget(cursor.nextToken("target")); - AlarmTrigger trigger = AlarmTrigger.valueOf( - cursor.nextToken("trigger").toUpperCase(Locale.ROOT) + TriggerConfiguration triggerConfiguration = parseTrigger( + cursor.nextToken("trigger") ); AlarmSeverity severity = AlarmSeverity.valueOf( @@ -81,7 +81,8 @@ public final class AlarmConfigurationParser { asset, direction, target, - trigger, + triggerConfiguration.trigger(), + triggerConfiguration.gracePeriod(), severity, note ); @@ -109,6 +110,50 @@ public final class AlarmConfigurationParser { return target; } + private static TriggerConfiguration parseTrigger(String triggerText) { + String normalized = triggerText.toUpperCase(Locale.ROOT); + + if (normalized.equals("ONETIME")) { + return new TriggerConfiguration(AlarmTrigger.ONETIME, 0); + } + + if (normalized.equals("PERSISTENT")) { + return new TriggerConfiguration(AlarmTrigger.PERSISTENT, 0); + } + + if (normalized.startsWith("PERSISTENT:")) { + String graceText = normalized.substring("PERSISTENT:".length()); + + if (graceText.isEmpty()) { + throw new IllegalArgumentException("Missing persistent grace period: " + triggerText); + } + + ΩsecondsΩ gracePeriodSeconds; + try { + gracePeriodSeconds = Integer.parseInt(graceText); + } catch (NumberFormatException exception) { + throw new IllegalArgumentException( + "Invalid persistent grace period: " + triggerText, + exception + ); + } + + if (gracePeriodSeconds < 0) { + throw new IllegalArgumentException( + "Persistent grace period cannot be negative: " + triggerText + ); + } + + return new TriggerConfiguration(AlarmTrigger.PERSISTENT, gracePeriodSeconds); + } + + if (normalized.startsWith("ONETIME:")) { + throw new IllegalArgumentException("ONETIME cannot have a grace period: " + triggerText); + } + + throw new IllegalArgumentException("Unknown trigger: " + triggerText); + } + private static void validateTarget(BigDecimal target, String originalTargetStr) { if (target.compareTo(BigDecimal.ZERO) < 0) { throw new IllegalArgumentException( @@ -274,6 +319,12 @@ public final class AlarmConfigurationParser { } } + private record TriggerConfiguration( + AlarmTrigger trigger, + ΩsecondsΩ gracePeriod + ) { + } + private AlarmConfigurationParser() { } diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarmDefinition.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarmDefinition.tjava index 4604166..eca2033 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarmDefinition.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarmDefinition.tjava @@ -11,7 +11,7 @@ public record PriceAlarmDefinition( PriceDirection direction, BigDecimal target, AlarmTrigger trigger, - long triggerGracePeriodSeconds, + ΩsecondsΩ triggerGracePeriodSeconds, AlarmSeverity severity, String note ) { diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/TriggerConfiguration.java b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/TriggerConfiguration.java new file mode 100644 index 0000000..45716fb --- /dev/null +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/TriggerConfiguration.java @@ -0,0 +1,2 @@ +package com.r35157.jupiterperpsalarm.impl.ref; +