1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package com.rapiddweller.domain.person;
28
29 import com.rapiddweller.common.CollectionUtil;
30 import com.rapiddweller.common.ConversionException;
31 import com.rapiddweller.common.LocaleUtil;
32 import com.rapiddweller.common.Locales;
33 import com.rapiddweller.common.StringUtil;
34 import com.rapiddweller.common.converter.ThreadSafeConverter;
35
36 import java.util.Locale;
37 import java.util.Set;
38
39
40
41
42
43
44
45
46 public abstract class PersonFormatter
47 extends ThreadSafeConverter<Person, String> {
48
49
50
51
52 public static final PersonFormatter WESTERN = new Western();
53
54
55
56 public static final PersonFormatter EASTERN = new Eastern();
57 private static final Set<Locale> EASTERN_LOCALES = CollectionUtil.toSet(
58 Locales.CHINESE, Locales.JAPANESE, Locales.KOREAN, Locales.THAI,
59 Locales.VIETNAMESE
60 );
61
62
63
64
65 public PersonFormatter() {
66 super(Person.class, String.class);
67 }
68
69
70
71
72
73
74
75 public static PersonFormatter getInstance(Locale locale) {
76 return (EASTERN_LOCALES.contains(LocaleUtil.language(locale)) ?
77 EASTERN : WESTERN);
78 }
79
80 @Override
81 public String convert(Person person) throws ConversionException {
82 return format(person);
83 }
84
85
86
87
88
89
90
91 public abstract String format(Person person);
92
93
94
95
96
97
98
99 protected void appendSeparated(String part, StringBuilder builder) {
100 if (!StringUtil.isEmpty(part)) {
101 if (builder.length() > 0) {
102 builder.append(' ');
103 }
104 builder.append(part);
105 }
106 }
107
108
109
110
111 static class Western extends PersonFormatter {
112
113 @Override
114 public String format(Person person) {
115 StringBuilder builder = new StringBuilder();
116 appendSeparated(person.getSalutation(), builder);
117 appendSeparated(person.getAcademicTitle(), builder);
118 appendSeparated(person.getNobilityTitle(), builder);
119 appendSeparated(person.getGivenName(), builder);
120 appendSeparated(person.getFamilyName(), builder);
121 return builder.toString();
122 }
123 }
124
125
126
127
128 static class Eastern extends PersonFormatter {
129
130 @Override
131 public String format(Person person) {
132 StringBuilder builder = new StringBuilder();
133 appendSeparated(person.getSalutation(), builder);
134 appendSeparated(person.getAcademicTitle(), builder);
135 appendSeparated(person.getNobilityTitle(), builder);
136 appendSeparated(person.getFamilyName(), builder);
137 appendSeparated(person.getGivenName(), builder);
138 return builder.toString();
139 }
140 }
141
142 }