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.benerator.Generator;
30 import com.rapiddweller.benerator.NonNullGenerator;
31 import com.rapiddweller.benerator.csv.WeightedDatasetCSVGenerator;
32 import com.rapiddweller.benerator.util.GeneratorUtil;
33 import com.rapiddweller.benerator.util.SharedGenerator;
34 import com.rapiddweller.common.Encodings;
35 import com.rapiddweller.domain.address.Country;
36
37 import java.util.HashMap;
38 import java.util.Locale;
39 import java.util.Map;
40
41
42
43
44
45
46
47
48
49 public class GivenNameGenerator extends WeightedDatasetCSVGenerator<String>
50 implements NonNullGenerator<String> {
51
52
53
54 private static final Map<String, Generator<String>> defaultInstances =
55 new HashMap<>();
56
57
58
59
60 public GivenNameGenerator() {
61 this(Locale.getDefault().getCountry(), Gender.MALE);
62 }
63
64
65
66
67
68
69
70
71
72 public GivenNameGenerator(String datasetName, Gender gender) {
73 this(datasetName,
74 "/com/rapiddweller/dataset/region",
75 "/com/rapiddweller/domain/person/givenName",
76 gender);
77 }
78
79
80
81
82
83
84
85
86
87 public GivenNameGenerator(String datasetName, String nesting,
88 String baseName, Gender gender) {
89 super(String.class, genderBaseName(baseName, gender) + "_{0}.csv",
90 datasetName, nesting, true, Encodings.UTF_8);
91 logger.debug(
92 "Instantiated GivenNameGenerator for dataset '{}' and gender '{}'",
93 datasetName, gender);
94 }
95
96
97
98
99
100
101
102
103 public static Generator<String> sharedInstance(String datasetName,
104 Gender gender) {
105 String key = datasetName + '-' + gender;
106 Generator<String> instance = defaultInstances.get(key);
107 if (instance == null) {
108 instance = new SharedGenerator<>(
109 new GivenNameGenerator(datasetName, gender));
110 defaultInstances.put(key, instance);
111 }
112 return instance;
113 }
114
115
116
117 private static String genderBaseName(String baseName, Gender gender) {
118 if (gender == Gender.FEMALE) {
119 return baseName + "_female";
120 } else if (gender == Gender.MALE) {
121 return baseName + "_male";
122 } else {
123 throw new IllegalArgumentException("Gender: " + gender);
124 }
125 }
126
127
128
129 @Override
130 public double getWeight() {
131 Country country = Country.getInstance(datasetName);
132 return (country != null ? country.getPopulation() : super.getWeight());
133 }
134
135
136
137 @Override
138 public String generate() {
139 return GeneratorUtil.generateNonNull(this);
140 }
141
142 @Override
143 public String toString() {
144 return getClass().getSimpleName() + "[" + datasetName + "]";
145 }
146
147 }