diff options
Diffstat (limited to 'src/org/traccar/processing')
-rw-r--r-- | src/org/traccar/processing/ComputedAttributesHandler.java | 18 | ||||
-rw-r--r-- | src/org/traccar/processing/CopyAttributesHandler.java | 9 |
2 files changed, 23 insertions, 4 deletions
diff --git a/src/org/traccar/processing/ComputedAttributesHandler.java b/src/org/traccar/processing/ComputedAttributesHandler.java index 8689c5a58..f1f371475 100644 --- a/src/org/traccar/processing/ComputedAttributesHandler.java +++ b/src/org/traccar/processing/ComputedAttributesHandler.java @@ -31,19 +31,33 @@ import org.traccar.BaseDataHandler; import org.traccar.Context; import org.traccar.helper.Log; import org.traccar.model.Attribute; +import org.traccar.model.Device; import org.traccar.model.Position; public class ComputedAttributesHandler extends BaseDataHandler { private JexlEngine engine; + private boolean mapDeviceAttributes; + public ComputedAttributesHandler() { engine = new JexlEngine(); engine.setStrict(true); + if (Context.getConfig() != null) { + mapDeviceAttributes = Context.getConfig().getBoolean("processing.computedAttributes.deviceAttributes"); + } } private MapContext prepareContext(Position position) { MapContext result = new MapContext(); + if (mapDeviceAttributes) { + Device device = Context.getIdentityManager().getById(position.getDeviceId()); + if (device != null) { + for (Object key : device.getAttributes().keySet()) { + result.set((String) key, device.getAttributes().get(key)); + } + } + } Set<Method> methods = new HashSet<>(Arrays.asList(position.getClass().getMethods())); methods.removeAll(Arrays.asList(Object.class.getMethods())); for (Method method : methods) { @@ -72,8 +86,8 @@ public class ComputedAttributesHandler extends BaseDataHandler { @Override protected Position handlePosition(Position position) { - Collection<Attribute> attributes = Context.getAttributesManager().getAttributes( - Context.getAttributesManager().getAllDeviceAttributes(position.getDeviceId())); + Collection<Attribute> attributes = Context.getAttributesManager().getItems( + Context.getAttributesManager().getAllDeviceItems(position.getDeviceId())); for (Attribute attribute : attributes) { if (attribute.getAttribute() != null) { Object result = null; diff --git a/src/org/traccar/processing/CopyAttributesHandler.java b/src/org/traccar/processing/CopyAttributesHandler.java index 3a96ca98d..9fbcfa73f 100644 --- a/src/org/traccar/processing/CopyAttributesHandler.java +++ b/src/org/traccar/processing/CopyAttributesHandler.java @@ -32,9 +32,14 @@ public class CopyAttributesHandler extends BaseDataHandler { @Override protected Position handlePosition(Position position) { String attributesString = Context.getDeviceManager().lookupAttributeString( - position.getDeviceId(), "processing.copyAttributes", null, true); + position.getDeviceId(), "processing.copyAttributes", "", true); Position last = getLastPosition(position.getDeviceId()); - if (attributesString != null && last != null) { + if (attributesString.isEmpty()) { + attributesString = Position.KEY_DRIVER_UNIQUE_ID; + } else { + attributesString += "," + Position.KEY_DRIVER_UNIQUE_ID; + } + if (last != null) { for (String attribute : attributesString.split("[ ,]")) { if (last.getAttributes().containsKey(attribute) && !position.getAttributes().containsKey(attribute)) { position.getAttributes().put(attribute, last.getAttributes().get(attribute)); |