44: Restrict CROSSING conditions to directional operators only

This commit is contained in:
2026-08-05 10:12:39 +02:00
parent f5c449fe23
commit bf492c9db1
2 changed files with 31 additions and 3 deletions
@@ -58,6 +58,11 @@ public final class AlarmConfigurationParser {
cursor.nextToken("trigger")
);
validateConditionForTrigger(
conditionExpression,
triggerConfiguration.trigger()
);
cursor.skipWhitespace();
if (!cursor.atEnd() && cursor.current() != '#') {
throw new IllegalArgumentException(
@@ -89,6 +94,27 @@ public final class AlarmConfigurationParser {
return conditionExpression;
}
private static void validateConditionForTrigger(
String conditionExpression,
AlarmTrigger trigger
) {
if (trigger != AlarmTrigger.CROSSING) {
return;
}
boolean directionalCondition =
(conditionExpression.startsWith("<")
&& !conditionExpression.startsWith("<="))
|| (conditionExpression.startsWith(">")
&& !conditionExpression.startsWith(">="));
if (!directionalCondition) {
throw new IllegalArgumentException(
"CROSSING requires a '<' or '>' condition: " + conditionExpression
);
}
}
private static TriggerConfiguration parseTrigger(String triggerText) {
String normalized = triggerText.toUpperCase(Locale.ROOT);