1 package com.github.mygreen.supercsv.validation.beanvalidation;
2
3 import java.util.HashMap;
4 import java.util.Locale;
5 import java.util.Map;
6 import java.util.Objects;
7
8 import com.github.mygreen.supercsv.localization.MessageInterpolator;
9 import com.github.mygreen.supercsv.localization.MessageResolver;
10
11 import jakarta.validation.metadata.ConstraintDescriptor;
12
13
14
15
16
17
18
19
20
21 public class JakartaMessageInterpolatorAdapter implements jakarta.validation.MessageInterpolator {
22
23 private final MessageResolver messageResolver;
24
25 private final MessageInterpolator csvMessageInterpolator;
26
27
28
29
30
31
32
33
34 public JakartaMessageInterpolatorAdapter(final MessageResolver messageResolver, final MessageInterpolator csvMessageInterpolator) {
35 Objects.requireNonNull(messageResolver);
36 Objects.requireNonNull(csvMessageInterpolator);
37
38 this.messageResolver = messageResolver;
39 this.csvMessageInterpolator = csvMessageInterpolator;
40 }
41
42 @Override
43 public String interpolate(final String messageTemplate, final Context context) {
44 return csvMessageInterpolator.interpolate(messageTemplate, createMessageVariables(context), true, messageResolver);
45 }
46
47 @Override
48 public String interpolate(final String messageTemplate, final Context context, final Locale locale) {
49 return csvMessageInterpolator.interpolate(messageTemplate, createMessageVariables(context), true, messageResolver);
50 }
51
52
53
54
55
56
57 private Map<String, Object> createMessageVariables(final Context context) {
58
59 final Map<String, Object> vars = new HashMap<>();
60
61 final ConstraintDescriptor<?> descriptor = context.getConstraintDescriptor();
62 for(Map.Entry<String, Object> entry : descriptor.getAttributes().entrySet()) {
63 final String attrName = entry.getKey();
64 final Object attrValue = entry.getValue();
65
66 vars.put(attrName, attrValue);
67 }
68
69
70 vars.computeIfAbsent("validatedValue", key -> context.getValidatedValue());
71
72 return vars;
73
74 }
75
76 public MessageResolver getMessageResolver() {
77 return messageResolver;
78 }
79
80 public MessageInterpolator getCsvMessageInterpolator() {
81 return csvMessageInterpolator;
82 }
83
84 }