From d866f6eda8d4a4cd14cbc6a9484adc9f37fa5a90 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 24 May 2023 20:01:41 -0400 Subject: [PATCH] use interpolation interface --- .../validation/core/CoreAdapterBuilder.java | 2 +- .../io/avaje/validation/core/DValidator.java | 17 ++++------------- .../validation/core/MessageInterpolator.java | 4 +++- .../core/NoopMessageInterpolator.java | 17 ++++++++++++++--- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/validator/src/main/java/io/avaje/validation/core/CoreAdapterBuilder.java b/validator/src/main/java/io/avaje/validation/core/CoreAdapterBuilder.java index e0b05108..965b7d7a 100644 --- a/validator/src/main/java/io/avaje/validation/core/CoreAdapterBuilder.java +++ b/validator/src/main/java/io/avaje/validation/core/CoreAdapterBuilder.java @@ -75,7 +75,7 @@ ValidationAdapter buildAnnotation(Class cls, Map attributes = msg.attributes(); - final Set> entries = attributes.entrySet(); - String result = template; - for (final Map.Entry entry : entries) { - // needs work here to improve functionality, support local specific value formatting eg Duration Max - result = result.replace('{' + entry.getKey() + '}', String.valueOf(entry.getValue())); - } - // return the message - return result; + + return interpolator.interpolate(template, msg.attributes()); } /** Implementation of Validator.Builder. */ @@ -184,7 +175,7 @@ public DValidator build() { final var interpolator = ServiceLoader.load(MessageInterpolator.class) .findFirst() - .orElseGet(NoopMessageInterpolator::new); + .orElseGet(BasicMessageInterpolator::new); return new DValidator(factories, afactories, interpolator, localeResolver); } diff --git a/validator/src/main/java/io/avaje/validation/core/MessageInterpolator.java b/validator/src/main/java/io/avaje/validation/core/MessageInterpolator.java index fe5669c5..6a514f59 100644 --- a/validator/src/main/java/io/avaje/validation/core/MessageInterpolator.java +++ b/validator/src/main/java/io/avaje/validation/core/MessageInterpolator.java @@ -1,6 +1,8 @@ package io.avaje.validation.core; +import java.util.Map; + public interface MessageInterpolator { - String interpolate(String string); + String interpolate(String template, Map attributes); } diff --git a/validator/src/main/java/io/avaje/validation/core/NoopMessageInterpolator.java b/validator/src/main/java/io/avaje/validation/core/NoopMessageInterpolator.java index 61ef00f0..146c444d 100644 --- a/validator/src/main/java/io/avaje/validation/core/NoopMessageInterpolator.java +++ b/validator/src/main/java/io/avaje/validation/core/NoopMessageInterpolator.java @@ -1,9 +1,20 @@ package io.avaje.validation.core; -final class NoopMessageInterpolator implements MessageInterpolator { +import java.util.Map; + +final class BasicMessageInterpolator implements MessageInterpolator { @Override - public String interpolate(String string) { - return string; + public String interpolate(String template, Map attributes) { + + String result = template; + + for (final Map.Entry entry : attributes.entrySet()) { + // needs work here to improve functionality, support local specific value formatting eg + // Duration Max + result = result.replace('{' + entry.getKey() + '}', String.valueOf(entry.getValue())); + } + // return the message + return result; } }