diff options
-rw-r--r-- | src/org/traccar/processing/ComputedAttributesHandler.java | 2 | ||||
-rw-r--r-- | test/org/traccar/processing/ComputedAttributesTest.java | 17 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/org/traccar/processing/ComputedAttributesHandler.java b/src/org/traccar/processing/ComputedAttributesHandler.java index f1f371475..1e702d17f 100644 --- a/src/org/traccar/processing/ComputedAttributesHandler.java +++ b/src/org/traccar/processing/ComputedAttributesHandler.java @@ -20,6 +20,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -43,6 +44,7 @@ public class ComputedAttributesHandler extends BaseDataHandler { public ComputedAttributesHandler() { engine = new JexlEngine(); engine.setStrict(true); + engine.setFunctions(Collections.singletonMap("math", (Object) Math.class)); if (Context.getConfig() != null) { mapDeviceAttributes = Context.getConfig().getBoolean("processing.computedAttributes.deviceAttributes"); } diff --git a/test/org/traccar/processing/ComputedAttributesTest.java b/test/org/traccar/processing/ComputedAttributesTest.java index ac4331c6d..fe898ff54 100644 --- a/test/org/traccar/processing/ComputedAttributesTest.java +++ b/test/org/traccar/processing/ComputedAttributesTest.java @@ -8,7 +8,7 @@ import org.traccar.model.Attribute; import org.traccar.model.Position; public class ComputedAttributesTest { - + @Test public void testComputedAttributes() { Position position = new Position(); @@ -39,26 +39,29 @@ public class ComputedAttributesTest { attribute.setExpression("if (event == 42) \"lowBattery\""); Assert.assertEquals("lowBattery", computedAttributesHandler.computeAttribute(attribute, position)); - + attribute.setExpression("speed > 5 && valid"); Assert.assertEquals(false, computedAttributesHandler.computeAttribute(attribute, position)); - + attribute.setExpression("fixTime"); Assert.assertEquals(date, computedAttributesHandler.computeAttribute(attribute, position)); - + + attribute.setExpression("math:pow(adc1, 2)"); + Assert.assertEquals(16384.0, computedAttributesHandler.computeAttribute(attribute, position)); + // modification tests attribute.setExpression("adc1 = 256"); computedAttributesHandler.computeAttribute(attribute, position); Assert.assertEquals(128, position.getInteger("adc1")); - + attribute.setExpression("result = \"fail\""); computedAttributesHandler.computeAttribute(attribute, position); Assert.assertEquals("success", position.getString("result")); - + attribute.setExpression("fixTime = \"2017-10-18 10:00:01\""); computedAttributesHandler.computeAttribute(attribute, position); Assert.assertEquals(date, position.getFixTime()); - + } } |