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