Added ability to filter out reporting geofencing events statuses
This commit is contained in:
parent
c783176e71
commit
589e159b54
@ -126,13 +126,37 @@ public class GeofencingCalculatedFieldState implements CalculatedFieldState {
|
|||||||
.stream()
|
.stream()
|
||||||
.map(zoneState -> zoneState.evaluate(entityCoordinates))
|
.map(zoneState -> zoneState.evaluate(entityCoordinates))
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
aggregateZoneGroupEvent(zoneEvents).ifPresent(event ->
|
aggregateZoneGroupEvent(zoneEvents)
|
||||||
|
.filter(geofencingEvent -> zoneGroupConfig.getReportEvents().contains(geofencingEvent))
|
||||||
|
.ifPresent(event ->
|
||||||
resultNode.put(zoneGroupConfig.getReportTelemetryPrefix() + "Event", event.name())
|
resultNode.put(zoneGroupConfig.getReportTelemetryPrefix() + "Event", event.name())
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
return Futures.immediateFuture(List.of(new CalculatedFieldResult(ctx.getOutput().getType(), ctx.getOutput().getScope(), resultNode)));
|
return Futures.immediateFuture(List.of(new CalculatedFieldResult(ctx.getOutput().getType(), ctx.getOutput().getScope(), resultNode)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isReady() {
|
||||||
|
return arguments.keySet().containsAll(requiredArguments) &&
|
||||||
|
arguments.values().stream().noneMatch(ArgumentEntry::isEmpty);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkStateSize(CalculatedFieldEntityCtxId ctxId, long maxStateSize) {
|
||||||
|
if (!sizeExceedsLimit && maxStateSize > 0 && CalculatedFieldUtils.toProto(ctxId, this).getSerializedSize() > maxStateSize) {
|
||||||
|
arguments.clear();
|
||||||
|
sizeExceedsLimit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Create a new class field to not do this on each calculation.
|
||||||
|
private Map<String, GeofencingArgumentEntry> getGeofencingArguments() {
|
||||||
|
return arguments.entrySet()
|
||||||
|
.stream()
|
||||||
|
.filter(entry -> !coordinateKeys.contains(entry.getKey()))
|
||||||
|
.collect(Collectors.toMap(Map.Entry::getKey, entry -> (GeofencingArgumentEntry) entry.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
private Optional<GeofencingEvent> aggregateZoneGroupEvent(Set<GeofencingEvent> zoneEvents) {
|
private Optional<GeofencingEvent> aggregateZoneGroupEvent(Set<GeofencingEvent> zoneEvents) {
|
||||||
boolean hasEntered = false;
|
boolean hasEntered = false;
|
||||||
boolean hasLeft = false;
|
boolean hasLeft = false;
|
||||||
@ -166,26 +190,4 @@ public class GeofencingCalculatedFieldState implements CalculatedFieldState {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isReady() {
|
|
||||||
return arguments.keySet().containsAll(requiredArguments) &&
|
|
||||||
arguments.values().stream().noneMatch(ArgumentEntry::isEmpty);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void checkStateSize(CalculatedFieldEntityCtxId ctxId, long maxStateSize) {
|
|
||||||
if (!sizeExceedsLimit && maxStateSize > 0 && CalculatedFieldUtils.toProto(ctxId, this).getSerializedSize() > maxStateSize) {
|
|
||||||
arguments.clear();
|
|
||||||
sizeExceedsLimit = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Create a new class field to not do this on each calculation.
|
|
||||||
private Map<String, GeofencingArgumentEntry> getGeofencingArguments() {
|
|
||||||
return arguments.entrySet()
|
|
||||||
.stream()
|
|
||||||
.filter(entry -> !coordinateKeys.contains(entry.getKey()))
|
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> (GeofencingArgumentEntry) entry.getValue()));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user