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 f0d8f0d..41e17d5 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava @@ -3,7 +3,6 @@ package com.r35157.jupiterperpsalarm.impl.ref; import com.r35157.jupiterperpsalarm.AlarmSeverity; import java.io.IOException; -import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; @@ -89,28 +88,6 @@ public final class AlarmConfigurationParser { ); } - private static BigDecimal parseTargetPercentage( - String targetStr, - int operatorIndex, - boolean add - ) { - BigDecimal base = new BigDecimal(targetStr.substring(0, operatorIndex)); - String percentStr = targetStr.substring(operatorIndex + 1, targetStr.length() - 1); - BigDecimal percent = new BigDecimal(percentStr); - - BigDecimal delta = base - .multiply(percent) - .divide(BigDecimal.valueOf(100)); - - BigDecimal target = add ? base.add(delta) : base.subtract(delta); - - validateTarget(base, targetStr); - validateTarget(percent, targetStr); - validateTarget(target, targetStr); - - return target; - } - private static TriggerConfiguration parseTrigger(String triggerText) { String normalized = triggerText.toUpperCase(Locale.ROOT); @@ -155,35 +132,6 @@ public final class AlarmConfigurationParser { throw new IllegalArgumentException("Unknown trigger: " + triggerText); } - private static void validateTarget(BigDecimal target, String originalTargetStr) { - if (target.compareTo(BigDecimal.ZERO) < 0) { - throw new IllegalArgumentException( - "Target must be zero or positive: " + originalTargetStr - ); - } - } - - private static BigDecimal parseTarget(String targetStr) { - String trimmedTargetStr = targetStr.trim(); - - if (trimmedTargetStr.endsWith("%")) { - int plusIndex = trimmedTargetStr.indexOf('+'); - int minusIndex = trimmedTargetStr.indexOf('-', 1); - - if (plusIndex >= 0) { - return parseTargetPercentage(trimmedTargetStr, plusIndex, true); - } - - if (minusIndex >= 0) { - return parseTargetPercentage(trimmedTargetStr, minusIndex, false); - } - } - - BigDecimal target = new BigDecimal(trimmedTargetStr); - validateTarget(target, targetStr); - return target; - } - private static final class Cursor { private Cursor(String line) { this.line = line; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmTargetParser.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmTargetParser.tjava new file mode 100644 index 0000000..4b2ba45 --- /dev/null +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmTargetParser.tjava @@ -0,0 +1,60 @@ +package com.r35157.jupiterperpsalarm.impl.ref; + +import java.math.BigDecimal; + +public final class AlarmTargetParser { + + private AlarmTargetParser() { + } + + public static BigDecimal parse(String targetStr) { + String trimmedTargetStr = targetStr.trim(); + + if (trimmedTargetStr.endsWith("%")) { + int plusIndex = trimmedTargetStr.indexOf('+'); + int minusIndex = trimmedTargetStr.indexOf('-', 1); + + if (plusIndex >= 0) { + return parseTargetPercentage(trimmedTargetStr, plusIndex, true); + } + + if (minusIndex >= 0) { + return parseTargetPercentage(trimmedTargetStr, minusIndex, false); + } + } + + BigDecimal target = new BigDecimal(trimmedTargetStr); + validateTarget(target, targetStr); + return target; + } + + private static BigDecimal parseTargetPercentage( + String targetStr, + int operatorIndex, + boolean add + ) { + BigDecimal base = new BigDecimal(targetStr.substring(0, operatorIndex)); + String percentStr = targetStr.substring(operatorIndex + 1, targetStr.length() - 1); + BigDecimal percent = new BigDecimal(percentStr); + + BigDecimal delta = base + .multiply(percent) + .divide(BigDecimal.valueOf(100)); + + BigDecimal target = add ? base.add(delta) : base.subtract(delta); + + validateTarget(base, targetStr); + validateTarget(percent, targetStr); + validateTarget(target, targetStr); + + return target; + } + + private static void validateTarget(BigDecimal target, String originalTargetStr) { + if (target.compareTo(BigDecimal.ZERO) < 0) { + throw new IllegalArgumentException( + "Target must be zero or positive: " + originalTargetStr + ); + } + } +} \ No newline at end of file