20: Move target price parsing to new AlarmTargetParser class
This commit is contained in:
@@ -3,7 +3,6 @@ package com.r35157.jupiterperpsalarm.impl.ref;
|
|||||||
import com.r35157.jupiterperpsalarm.AlarmSeverity;
|
import com.r35157.jupiterperpsalarm.AlarmSeverity;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
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) {
|
private static TriggerConfiguration parseTrigger(String triggerText) {
|
||||||
String normalized = triggerText.toUpperCase(Locale.ROOT);
|
String normalized = triggerText.toUpperCase(Locale.ROOT);
|
||||||
|
|
||||||
@@ -155,35 +132,6 @@ public final class AlarmConfigurationParser {
|
|||||||
throw new IllegalArgumentException("Unknown trigger: " + triggerText);
|
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 static final class Cursor {
|
||||||
private Cursor(String line) {
|
private Cursor(String line) {
|
||||||
this.line = line;
|
this.line = line;
|
||||||
|
|||||||
@@ -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
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user