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.lang;
28
29 import com.rapiddweller.common.LocaleUtil;
30 import com.rapiddweller.common.NullSafeComparator;
31 import com.rapiddweller.common.StringUtil;
32 import com.rapiddweller.format.DataContainer;
33 import com.rapiddweller.format.csv.CSVLineIterator;
34
35 import java.io.IOException;
36 import java.util.Collection;
37 import java.util.HashSet;
38 import java.util.Locale;
39 import java.util.Set;
40
41
42
43
44
45
46
47
48
49 public class Noun {
50
51 private final Language language;
52
53 private final String singular;
54 private final String plural;
55 private final int gender;
56
57
58
59
60
61
62
63
64
65 public Noun(String singular, String plural, int gender, Language language) {
66 this.singular = singular;
67 this.plural = plural;
68 this.gender = gender;
69 this.language = language;
70 }
71
72
73
74
75
76
77
78
79 public static Collection<Noun> getInstances(Locale locale)
80 throws IOException {
81 Language language = Language.getInstance(locale);
82 Set<Noun> nouns = new HashSet<>(500);
83 String url = LocaleUtil
84 .availableLocaleUrl("/com/rapiddweller/domain/lang/noun",
85 locale, ".csv");
86 CSVLineIterator iterator = new CSVLineIterator(url, ',', true);
87 DataContainer<String[]> container = new DataContainer<>();
88 while ((container = iterator.next(container)) != null) {
89 String[] line = container.getData();
90 String singular =
91 (StringUtil.isEmpty(line[0]) ? null : line[0].trim());
92 String plural;
93 if (line.length > 1 && !StringUtil.isEmpty(line[1])) {
94 plural = line[1].trim();
95 if (plural.startsWith("-")) {
96 plural = singular + plural.substring(1);
97 }
98 } else {
99 plural = null;
100 }
101 int gender = (line.length >= 3 ? Integer.parseInt(line[2]) : 0);
102 nouns.add(new Noun(singular, plural, gender, language));
103 }
104 return nouns;
105 }
106
107
108
109
110
111
112 public String getSingular() {
113 return singular;
114 }
115
116
117
118
119
120
121 public String getPlural() {
122 return plural;
123 }
124
125 @Override
126 public String toString() {
127 StringBuilder builder = new StringBuilder();
128 if (singular != null) {
129 builder.append(language.definiteArticle(gender, false)).append(' ')
130 .append(singular);
131 if (plural != null) {
132 builder.append(", ");
133 }
134 }
135 if (plural != null) {
136 builder.append(language.definiteArticle(gender, true)).append(' ')
137 .append(plural);
138 }
139 return builder.toString();
140 }
141
142 @Override
143 public int hashCode() {
144 int pHash = (plural == null ? 0 : plural.hashCode());
145 int sHash = (singular == null ? 0 : singular.hashCode());
146 return (pHash * 31 + sHash) * 31 + gender;
147 }
148
149 @Override
150 public boolean equals(Object obj) {
151 if (this == obj) {
152 return true;
153 }
154 if (obj == null) {
155 return false;
156 }
157 if (getClass() != obj.getClass()) {
158 return false;
159 }
160 Nounef="../../../../com/rapiddweller/domain/lang/Noun.html#Noun">Noun that = (Noun) obj;
161 return NullSafeComparator.equals(this.singular, that.singular) &&
162 NullSafeComparator.equals(this.plural, that.plural) &&
163 this.gender == that.gender;
164 }
165
166 }