diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2024-01-05 08:05:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-05 08:05:47 +0100 |
commit | d02469096d4bf5b0bc742e5ec978f9f8cc873eda (patch) | |
tree | de5613532bfd2ed52586d3072d6b0b891a91d66f /config-model-api/src/main/java/com | |
parent | d8b50e4eaea708fed984c7c6ccdd06ac48b358bf (diff) |
Revert "Revert "Jonmv/refactor validation" MERGEOK"
Diffstat (limited to 'config-model-api/src/main/java/com')
-rw-r--r-- | config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java index 7b52d825473..ab722dfb919 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java @@ -19,6 +19,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -49,10 +50,7 @@ public class ValidationOverrides { /** Throws a ValidationException unless all given validation is overridden at this time */ public void invalid(Map<ValidationId, ? extends Collection<String>> messagesByValidationId, Instant now) { - Map<ValidationId, Collection<String>> disallowed = new HashMap<>(messagesByValidationId); - disallowed.keySet().removeIf(id -> allows(id, now)); - if ( ! disallowed.isEmpty()) - throw new ValidationException(disallowed); + invalidException(messagesByValidationId, now).ifPresent(e -> { throw e; }); } /** Throws a ValidationException unless this validation is overridden at this time */ @@ -61,6 +59,21 @@ public class ValidationOverrides { throw new ValidationException(validationId, message); } + public Optional<ValidationException> invalidException(Map<ValidationId, ? extends Collection<String>> messagesByValidationId, Instant now) { + Map<ValidationId, Collection<String>> disallowed = new HashMap<>(messagesByValidationId); + disallowed.keySet().removeIf(id -> allows(id, now)); + + if (disallowed.size() == 1 && disallowed.values().iterator().next().size() == 1) // Single-message form if possible. + return Optional.of(new ValidationException(disallowed.keySet().iterator().next(), + disallowed.values().iterator().next().iterator().next())); + + if ( ! disallowed.isEmpty()) + return Optional.of(new ValidationException(disallowed)); + + return Optional.empty(); + } + + // TODO: remove after 8.284 is gone public boolean allows(String validationIdString, Instant now) { Optional<ValidationId> validationId = ValidationId.from(validationIdString); if (validationId.isEmpty()) return false; // unknown id -> not allowed @@ -77,12 +90,17 @@ public class ValidationOverrides { } /** Validates overrides (checks 'until' date') */ - public boolean validate(Instant now) { + public void validate(Instant now, Consumer<String> reporter) { for (Allow override : overrides) { if (now.plus(Duration.ofDays(30)).isBefore(override.until)) - throw new IllegalArgumentException("validation-overrides is invalid: " + override + - " is too far in the future: Max 30 days is allowed"); + reporter.accept("validation-overrides is invalid: " + override + + " is too far in the future: Max 30 days is allowed"); } + } + + /** Validates overrides (checks 'until' date') */ + public boolean validate(Instant now) { + validate(now, message -> { throw new IllegalArgumentException(message); }); return false; } |