1 package com.github.mygreen.supercsv.localization;
2
3 import java.lang.annotation.Annotation;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import com.github.mygreen.supercsv.util.ArgUtils;
8
9
10
11
12
13
14
15
16 public class MessageBuilder {
17
18 private static final MessageResolver MESSAGE_RESOLVER = new ResourceBundleMessageResolver("com.github.mygreen.supercsv.localization.Messages", false);
19 private static final MessageInterpolatorrpolator.html#MessageInterpolator">MessageInterpolator MESSAGE_INTERPOLATOR = new MessageInterpolator();
20
21 private final String code;
22
23 private Map<String, Object> vars = new HashMap<>();
24
25
26
27
28
29
30
31 public MessageBuilder(final String code) {
32 ArgUtils.notEmpty(code, "code");
33 this.code = code;
34 }
35
36
37
38
39
40
41
42 public MessageBuilder var(final String key, final Object value) {
43 vars.put(key, value);
44 return this;
45 }
46
47
48
49
50
51
52
53 public MessageBuilder varWithAnno(final String key, final Class<? extends Annotation> annoClass) {
54 return var(key, "@" + annoClass.getSimpleName());
55 }
56
57
58
59
60
61
62
63
64 public MessageBuilder varWithClass(final String key, final Class<?> clazz) {
65
66 final String className;
67 if(clazz.isArray()) {
68
69 Class<?> elementType = clazz.getComponentType();
70 className = elementType.getName() + "[]";
71
72 } else {
73 className = clazz.getName();
74
75 }
76
77 return var(key, className);
78 }
79
80
81
82
83
84
85
86 public String format() {
87
88 return format(false);
89 }
90
91
92
93
94
95
96
97 public String format(final boolean recusrsive) {
98
99 final String message = MESSAGE_RESOLVER.getMessage(code)
100 .orElseThrow(() -> new IllegalStateException(String.format("not found message key=%s", code)));
101
102 return MESSAGE_INTERPOLATOR.interpolate(message, vars, recusrsive, MESSAGE_RESOLVER);
103 }
104
105
106
107
108
109
110
111 public static MessageBuilder create(final String code) {
112
113 return new MessageBuilder(code);
114
115 }
116 }