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.address;
28
29 import com.rapiddweller.benerator.NonNullGenerator;
30 import com.rapiddweller.benerator.WeightedGenerator;
31 import com.rapiddweller.benerator.dataset.AbstractDatasetGenerator;
32 import com.rapiddweller.benerator.dataset.Dataset;
33 import com.rapiddweller.benerator.distribution.FeatureWeight;
34 import com.rapiddweller.benerator.distribution.IndividualWeight;
35 import com.rapiddweller.benerator.sample.IndividualWeightSampleGenerator;
36 import com.rapiddweller.benerator.util.GeneratorUtil;
37
38
39
40
41
42
43
44
45 public class CityGenerator extends AbstractDatasetGenerator<City>
46 implements NonNullGenerator<City> {
47
48 private static final String REGION = "/com/rapiddweller/dataset/region";
49
50
51
52
53
54
55 public CityGenerator(String dataset) {
56 super(City.class, REGION, dataset, true);
57 }
58
59 @Override
60 protected boolean isAtomic(Dataset dataset) {
61 Country country = Country.getInstance(dataset.getName(), false);
62 return (country != null);
63 }
64
65 @SuppressWarnings({"rawtypes", "unchecked"})
66 @Override
67 protected WeightedGenerator<City> createGeneratorForAtomicDataset(
68 Dataset dataset) {
69 IndividualWeightSampleGenerator<City> generator =
70 new IndividualWeightSampleGenerator<City>(
71 City.class,
72 (IndividualWeight) new FeatureWeight("population"));
73 Country country = Country.getInstance(dataset.getName());
74 country.checkCities();
75 for (State state : country.getStates()) {
76 for (City city : state.getCities()) {
77 generator.addValue(city);
78 }
79 }
80 return (generator.getVariety() > 0 ? generator : null);
81 }
82
83 @Override
84 public City generate() {
85 return GeneratorUtil.generateNonNull(this);
86 }
87
88 }