Generalize runtime source-kind filtering

This commit is contained in:
trifonovt 2026-06-05 14:40:29 +02:00
parent 5cf0cedc41
commit 84922f6c44
7 changed files with 39 additions and 46 deletions

View File

@ -3,7 +3,6 @@ package at.procon.eventhub.processing.dto;
import at.procon.eventhub.processing.model.UnifiedEventSourceFamily; import at.procon.eventhub.processing.model.UnifiedEventSourceFamily;
import at.procon.eventhub.processing.model.UnifiedRuntimeEventBackend; import at.procon.eventhub.processing.model.UnifiedRuntimeEventBackend;
import at.procon.eventhub.processing.model.UnifiedRuntimeProcessingRequest; import at.procon.eventhub.processing.model.UnifiedRuntimeProcessingRequest;
import at.procon.eventhub.processing.model.UnifiedTachographSourceKind;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -16,7 +15,7 @@ public record UnifiedRuntimeProcessingApiRequest(
String tenantKey, String tenantKey,
Set<UnifiedEventSourceFamily> sourceFamilies, Set<UnifiedEventSourceFamily> sourceFamilies,
UnifiedRuntimeEventBackend eventBackend, UnifiedRuntimeEventBackend eventBackend,
Set<UnifiedTachographSourceKind> tachographSourceKinds, Set<String> sourceKinds,
String driverKey, String driverKey,
Set<String> driverKeys, Set<String> driverKeys,
Boolean includeAllDrivers, Boolean includeAllDrivers,
@ -43,7 +42,7 @@ public record UnifiedRuntimeProcessingApiRequest(
String tenantKey, String tenantKey,
Set<UnifiedEventSourceFamily> sourceFamilies, Set<UnifiedEventSourceFamily> sourceFamilies,
UnifiedRuntimeEventBackend eventBackend, UnifiedRuntimeEventBackend eventBackend,
Set<UnifiedTachographSourceKind> tachographSourceKinds, Set<String> sourceKinds,
String driverKey, String driverKey,
Set<String> driverKeys, Set<String> driverKeys,
Boolean includeAllDrivers, Boolean includeAllDrivers,
@ -69,7 +68,7 @@ public record UnifiedRuntimeProcessingApiRequest(
tenantKey, tenantKey,
sourceFamilies, sourceFamilies,
eventBackend, eventBackend,
tachographSourceKinds, sourceKinds,
driverKey, driverKey,
driverKeys, driverKeys,
includeAllDrivers, includeAllDrivers,
@ -99,7 +98,7 @@ public record UnifiedRuntimeProcessingApiRequest(
tenantKey, tenantKey,
sourceFamilies, sourceFamilies,
eventBackend, eventBackend,
tachographSourceKinds, sourceKinds,
driverKey, driverKey,
driverKeys, driverKeys,
includeAllDrivers != null && includeAllDrivers, includeAllDrivers != null && includeAllDrivers,

View File

@ -388,7 +388,7 @@ public class DriverWorkingTimeRuntimeProcessingPlan implements RuntimeProcessing
sourceSelection.tenantKey(), sourceSelection.tenantKey(),
sourceSelection.sourceFamilies(), sourceSelection.sourceFamilies(),
sourceSelection.eventBackend(), sourceSelection.eventBackend(),
sourceSelection.tachographSourceKinds(), sourceSelection.sourceKinds(),
sourceSelection.driverKey(), sourceSelection.driverKey(),
driverKeys, driverKeys,
includeAllDrivers, includeAllDrivers,

View File

@ -3,7 +3,6 @@ package at.procon.eventhub.processing.model;
import at.procon.eventhub.reference.DriverCardNumberNormalizer; import at.procon.eventhub.reference.DriverCardNumberNormalizer;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -17,7 +16,7 @@ public record UnifiedRuntimeProcessingRequest(
String tenantKey, String tenantKey,
Set<UnifiedEventSourceFamily> sourceFamilies, Set<UnifiedEventSourceFamily> sourceFamilies,
UnifiedRuntimeEventBackend eventBackend, UnifiedRuntimeEventBackend eventBackend,
Set<UnifiedTachographSourceKind> tachographSourceKinds, Set<String> sourceKinds,
String driverKey, String driverKey,
Set<String> driverKeys, Set<String> driverKeys,
boolean includeAllDrivers, boolean includeAllDrivers,
@ -40,7 +39,7 @@ public record UnifiedRuntimeProcessingRequest(
String tenantKey, String tenantKey,
Set<UnifiedEventSourceFamily> sourceFamilies, Set<UnifiedEventSourceFamily> sourceFamilies,
UnifiedRuntimeEventBackend eventBackend, UnifiedRuntimeEventBackend eventBackend,
Set<UnifiedTachographSourceKind> tachographSourceKinds, Set<String> sourceKinds,
String driverKey, String driverKey,
Set<String> driverKeys, Set<String> driverKeys,
boolean includeAllDrivers, boolean includeAllDrivers,
@ -62,7 +61,7 @@ public record UnifiedRuntimeProcessingRequest(
tenantKey, tenantKey,
sourceFamilies, sourceFamilies,
eventBackend, eventBackend,
tachographSourceKinds, sourceKinds,
driverKey, driverKey,
driverKeys, driverKeys,
includeAllDrivers, includeAllDrivers,
@ -87,7 +86,7 @@ public record UnifiedRuntimeProcessingRequest(
throw new IllegalArgumentException("sourceFamilies must not be empty"); throw new IllegalArgumentException("sourceFamilies must not be empty");
} }
eventBackend = eventBackend == null ? UnifiedRuntimeEventBackend.SOURCE_DB : eventBackend; eventBackend = eventBackend == null ? UnifiedRuntimeEventBackend.SOURCE_DB : eventBackend;
tachographSourceKinds = normalizeTachographSourceKinds(tachographSourceKinds); sourceKinds = normalizeSourceKinds(sourceKinds);
sessionIds = normalizeSessionIds(sessionId, sessionIds); sessionIds = normalizeSessionIds(sessionId, sessionIds);
if (sessionId == null && !sessionIds.isEmpty()) { if (sessionId == null && !sessionIds.isEmpty()) {
sessionId = sessionIds.get(0); sessionId = sessionIds.get(0);
@ -448,7 +447,7 @@ public record UnifiedRuntimeProcessingRequest(
tenantKey, tenantKey,
Set.of(sourceInput.sourceFamily()), Set.of(sourceInput.sourceFamily()),
sourceInput.eventBackend(), sourceInput.eventBackend(),
tachographSourceKinds, sourceKinds,
driverKey, driverKey,
driverKeys, driverKeys,
includeAllDrivers, includeAllDrivers,
@ -485,7 +484,7 @@ public record UnifiedRuntimeProcessingRequest(
tenantKey, tenantKey,
sourceFamilies, sourceFamilies,
eventBackend, eventBackend,
tachographSourceKinds, sourceKinds,
value, value,
Set.of(), Set.of(),
false, false,
@ -507,21 +506,15 @@ public record UnifiedRuntimeProcessingRequest(
return includeAllDrivers || driverKeys.size() > 1 || (driverKey == null && !driverKeys.isEmpty()); return includeAllDrivers || driverKeys.size() > 1 || (driverKey == null && !driverKeys.isEmpty());
} }
public boolean includesTachographSourceKind(String sourceKind) { public boolean includesSourceKind(String sourceKind) {
if (sourceKind == null || sourceKind.isBlank()) { if (sourceKind == null || sourceKind.isBlank()) {
return true; return true;
} }
try { return sourceKinds.contains(sourceKind.trim().toUpperCase());
return tachographSourceKinds.contains(UnifiedTachographSourceKind.valueOf(sourceKind.trim().toUpperCase()));
} catch (IllegalArgumentException ex) {
return false;
}
} }
public List<String> tachographSourceKindNames() { public List<String> sourceKindNames() {
return tachographSourceKinds.stream() return sourceKinds.stream().toList();
.map(UnifiedTachographSourceKind::name)
.toList();
} }
private static Set<UnifiedEventSourceFamily> normalizeSourceFamilies( private static Set<UnifiedEventSourceFamily> normalizeSourceFamilies(
@ -600,13 +593,20 @@ public record UnifiedRuntimeProcessingRequest(
return Set.copyOf(normalized); return Set.copyOf(normalized);
} }
private static Set<UnifiedTachographSourceKind> normalizeTachographSourceKinds( private static Set<String> normalizeSourceKinds(
Set<UnifiedTachographSourceKind> values Set<String> values
) { ) {
if (values == null || values.isEmpty()) { if (values == null || values.isEmpty()) {
return Set.copyOf(Arrays.asList(UnifiedTachographSourceKind.values())); return Set.of("DRIVER_CARD", "VEHICLE_UNIT");
} }
return Set.copyOf(values); LinkedHashSet<String> normalized = new LinkedHashSet<>();
for (String value : values) {
String normalizedValue = normalizeUpper(value);
if (normalizedValue != null) {
normalized.add(normalizedValue);
}
}
return normalized.isEmpty() ? Set.of("DRIVER_CARD", "VEHICLE_UNIT") : Set.copyOf(normalized);
} }
private static boolean isExternalDbFamily(UnifiedEventSourceFamily family) { private static boolean isExternalDbFamily(UnifiedEventSourceFamily family) {

View File

@ -1,6 +0,0 @@
package at.procon.eventhub.processing.model;
public enum UnifiedTachographSourceKind {
DRIVER_CARD,
VEHICLE_UNIT
}

View File

@ -71,7 +71,7 @@ public class EventHubRuntimeEventLoader implements RuntimeDriverEventLoader, Run
request.driverCardNumber(), request.driverCardNumber(),
request.occurredFrom(), request.occurredFrom(),
request.occurredTo(), request.occurredTo(),
request.tachographSourceKindNames(), request.sourceKindNames(),
request.includeIntersectingIntervals() request.includeIntersectingIntervals()
); );
case YELLOWFOX_DB -> UnifiedDriverEventsRequest.forYellowFoxDbDriver( case YELLOWFOX_DB -> UnifiedDriverEventsRequest.forYellowFoxDbDriver(
@ -100,7 +100,7 @@ public class EventHubRuntimeEventLoader implements RuntimeDriverEventLoader, Run
vehicleRef.registrationNumber(), vehicleRef.registrationNumber(),
request.vehicleOccurredFrom(), request.vehicleOccurredFrom(),
request.vehicleOccurredTo(), request.vehicleOccurredTo(),
request.tachographSourceKindNames(), request.sourceKindNames(),
request.includeIntersectingIntervals() request.includeIntersectingIntervals()
); );
case YELLOWFOX_DB -> UnifiedVehicleEventsRequest.forYellowFoxDb( case YELLOWFOX_DB -> UnifiedVehicleEventsRequest.forYellowFoxDb(

View File

@ -121,7 +121,7 @@ public class TachographDbRuntimeEventLoader implements RuntimeDriverEventLoader,
) { ) {
return definitionRegistry.definitions().stream() return definitionRegistry.definitions().stream()
.filter(definition -> !"VEHICLE".equals(definition.entityAxis())) .filter(definition -> !"VEHICLE".equals(definition.entityAxis()))
.filter(definition -> request.includesTachographSourceKind(definition.sourceKind())) .filter(definition -> request.includesSourceKind(definition.sourceKind()))
.toList(); .toList();
} }
@ -130,7 +130,7 @@ public class TachographDbRuntimeEventLoader implements RuntimeDriverEventLoader,
) { ) {
return definitionRegistry.definitions().stream() return definitionRegistry.definitions().stream()
.filter(definition -> !"DRIVER".equals(definition.entityAxis())) .filter(definition -> !"DRIVER".equals(definition.entityAxis()))
.filter(definition -> request.includesTachographSourceKind(definition.sourceKind())) .filter(definition -> request.includesSourceKind(definition.sourceKind()))
.toList(); .toList();
} }

View File

@ -67,12 +67,12 @@ class UnifiedRuntimeProcessingRequestTest {
OffsetDateTime.parse("2026-05-02T00:00:00Z") OffsetDateTime.parse("2026-05-02T00:00:00Z")
); );
assertThat(defaultRequest.tachographSourceKinds()).containsExactlyInAnyOrder( assertThat(defaultRequest.sourceKinds()).containsExactlyInAnyOrder(
UnifiedTachographSourceKind.DRIVER_CARD, "DRIVER_CARD",
UnifiedTachographSourceKind.VEHICLE_UNIT "VEHICLE_UNIT"
); );
assertThat(defaultRequest.includesTachographSourceKind("DRIVER_CARD")).isTrue(); assertThat(defaultRequest.includesSourceKind("DRIVER_CARD")).isTrue();
assertThat(defaultRequest.includesTachographSourceKind("VEHICLE_UNIT")).isTrue(); assertThat(defaultRequest.includesSourceKind("VEHICLE_UNIT")).isTrue();
UnifiedRuntimeProcessingRequest driverCardOnlyRequest = new UnifiedRuntimeProcessingRequest( UnifiedRuntimeProcessingRequest driverCardOnlyRequest = new UnifiedRuntimeProcessingRequest(
null, null,
@ -81,7 +81,7 @@ class UnifiedRuntimeProcessingRequestTest {
"default", "default",
Set.of(UnifiedEventSourceFamily.TACHOGRAPH_DB), Set.of(UnifiedEventSourceFamily.TACHOGRAPH_DB),
UnifiedRuntimeEventBackend.SOURCE_DB, UnifiedRuntimeEventBackend.SOURCE_DB,
Set.of(UnifiedTachographSourceKind.DRIVER_CARD), Set.of("DRIVER_CARD"),
null, null,
Set.of(), Set.of(),
false, false,
@ -97,9 +97,9 @@ class UnifiedRuntimeProcessingRequestTest {
true true
); );
assertThat(driverCardOnlyRequest.tachographSourceKinds()).containsExactly(UnifiedTachographSourceKind.DRIVER_CARD); assertThat(driverCardOnlyRequest.sourceKinds()).containsExactly("DRIVER_CARD");
assertThat(driverCardOnlyRequest.includesTachographSourceKind("DRIVER_CARD")).isTrue(); assertThat(driverCardOnlyRequest.includesSourceKind("DRIVER_CARD")).isTrue();
assertThat(driverCardOnlyRequest.includesTachographSourceKind("VEHICLE_UNIT")).isFalse(); assertThat(driverCardOnlyRequest.includesSourceKind("VEHICLE_UNIT")).isFalse();
} }
@Test @Test