|
|
|
@ -58,7 +58,18 @@ public class SimpleCalculatedFieldState extends BaseCalculatedFieldState { |
|
|
|
for (Map.Entry<String, ArgumentEntry> entry : this.arguments.entrySet()) { |
|
|
|
try { |
|
|
|
BasicKvEntry kvEntry = ((SingleValueArgumentEntry) entry.getValue()).getKvEntryValue(); |
|
|
|
expr.setVariable(entry.getKey(), Double.parseDouble(kvEntry.getValueAsString())); |
|
|
|
try { |
|
|
|
double value = switch (kvEntry.getDataType()) { |
|
|
|
case LONG -> kvEntry.getLongValue().map(Long::doubleValue).orElseThrow(); |
|
|
|
case DOUBLE -> kvEntry.getDoubleValue().orElseThrow(); |
|
|
|
case BOOLEAN -> kvEntry.getBooleanValue().map(b -> b ? 1.0 : 0.0).orElseThrow(); |
|
|
|
case STRING -> Double.parseDouble(kvEntry.getValueAsString()); |
|
|
|
case JSON -> Double.parseDouble(kvEntry.getValueAsString()); |
|
|
|
}; |
|
|
|
expr.setVariable(entry.getKey(), value); |
|
|
|
} catch (Exception e) { |
|
|
|
throw new IllegalArgumentException("Argument '" + entry.getKey() + "' is not a number.", e); |
|
|
|
} |
|
|
|
} catch (NumberFormatException e) { |
|
|
|
throw new IllegalArgumentException("Argument '" + entry.getKey() + "' is not a number."); |
|
|
|
} |
|
|
|
@ -85,7 +96,13 @@ public class SimpleCalculatedFieldState extends BaseCalculatedFieldState { |
|
|
|
|
|
|
|
private JsonNode createResultJson(boolean preserveMsgTs, String outputName, Object result) { |
|
|
|
ObjectNode valuesNode = JacksonUtil.newObjectNode(); |
|
|
|
valuesNode.set(outputName, JacksonUtil.valueToTree(result)); |
|
|
|
if (result instanceof Double doubleValue) { |
|
|
|
valuesNode.put(outputName, doubleValue); |
|
|
|
} else if (result instanceof Integer integerValue) { |
|
|
|
valuesNode.put(outputName, integerValue); |
|
|
|
} else { |
|
|
|
valuesNode.set(outputName, JacksonUtil.valueToTree(result)); |
|
|
|
} |
|
|
|
|
|
|
|
long lastTimestamp = getLastUpdateTimestamp(); |
|
|
|
if (preserveMsgTs && lastTimestamp != -1) { |
|
|
|
|