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

View File

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

View File

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

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

View File

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

View File

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