aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/processing
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/processing')
-rw-r--r--src/org/traccar/processing/ComputedAttributesHandler.java18
-rw-r--r--src/org/traccar/processing/CopyAttributesHandler.java9
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));