1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.opencastproject.elasticsearch.impl;
24
25 import org.opencastproject.elasticsearch.api.Language;
26 import org.opencastproject.elasticsearch.api.SearchMetadata;
27
28 import java.text.MessageFormat;
29 import java.util.ArrayList;
30 import java.util.Collection;
31 import java.util.HashMap;
32 import java.util.Iterator;
33 import java.util.List;
34 import java.util.Map;
35
36
37
38
39
40
41
42 public class SearchMetadataCollection implements Collection<SearchMetadata<?>> {
43
44
45 protected Map<String, SearchMetadata<?>> metadata = new HashMap<>();
46
47
48 protected String identifier = null;
49
50
51 protected String documentType = null;
52
53
54
55
56
57
58
59
60
61 public SearchMetadataCollection(String documentType) {
62 this(null, documentType);
63 }
64
65
66
67
68
69
70
71
72
73 public SearchMetadataCollection(String identifier, String documentType) {
74 this.identifier = identifier;
75 this.documentType = documentType;
76 }
77
78
79
80
81
82
83
84 public void setIdentifier(String identifier) {
85 this.identifier = identifier;
86 }
87
88
89
90
91
92
93 public String getIdentifier() {
94 return identifier;
95 }
96
97
98
99
100
101
102 public String getDocumentType() {
103 return documentType;
104 }
105
106
107
108
109
110
111
112
113
114
115
116 @SuppressWarnings("unchecked")
117 public void addField(String fieldName, Object fieldValue, boolean addToText) {
118 if (fieldName == null) {
119 throw new IllegalArgumentException("Field name cannot be null");
120 }
121 if (fieldName.contains(".")) {
122 throw new IllegalArgumentException("Field name may not contain '.'");
123 }
124 if (fieldValue == null) {
125 return;
126 }
127
128 SearchMetadata<Object> m = (SearchMetadata<Object>) metadata.get(fieldName);
129 if (m == null) {
130 m = new SearchMetadataImpl<Object>(fieldName);
131 metadata.put(fieldName, m);
132 }
133
134 m.setAddToText(addToText);
135
136 if (fieldValue.getClass().isArray()) {
137 Object[] fieldValues = (Object[]) fieldValue;
138 for (Object v : fieldValues) {
139 m.addValue(v);
140 }
141 } else {
142 m.addValue(fieldValue);
143 }
144 }
145
146
147
148
149
150
151
152
153
154
155
156 protected String getLocalizedFieldName(String fieldName, Language language) {
157 return MessageFormat.format(fieldName, language.getIdentifier());
158 }
159
160
161
162
163
164
165 public List<SearchMetadata<?>> getMetadata() {
166 return new ArrayList<>(metadata.values());
167 }
168
169
170
171
172
173
174 public boolean add(SearchMetadata<?> e) {
175 return metadata.put(e.getName(), e) != null;
176 }
177
178
179
180
181
182
183 public boolean addAll(Collection<? extends SearchMetadata<?>> c) {
184 for (SearchMetadata<?> m : c) {
185 metadata.put(m.getName(), m);
186 }
187 return true;
188 }
189
190
191
192
193
194
195 public void clear() {
196 metadata.clear();
197 }
198
199
200
201
202
203
204 public boolean contains(Object o) {
205 return metadata.values().contains(o);
206 }
207
208
209
210
211
212
213 public boolean containsAll(Collection<?> c) {
214 for (Object o : c) {
215 if (!metadata.values().contains(o)) {
216 return false;
217 }
218 }
219 return true;
220 }
221
222
223
224
225
226
227 public boolean isEmpty() {
228 return metadata.isEmpty();
229 }
230
231
232
233
234
235
236 public Iterator<SearchMetadata<?>> iterator() {
237 List<SearchMetadata<?>> result = new ArrayList<SearchMetadata<?>>();
238 result.addAll(metadata.values());
239 return result.iterator();
240 }
241
242
243
244
245
246
247 public boolean remove(Object o) {
248 return metadata.remove(o) != null;
249 }
250
251
252
253
254
255
256 public boolean removeAll(Collection<?> c) {
257 boolean removed = false;
258 for (Object o : c) {
259 removed |= metadata.remove(o) != null;
260 }
261 return removed;
262 }
263
264
265
266
267
268
269 public boolean retainAll(Collection<?> c) {
270 boolean removed = false;
271 for (SearchMetadata<?> m : metadata.values()) {
272 if (!c.contains(m)) {
273 metadata.remove(m);
274 removed = true;
275 }
276 }
277 return removed;
278 }
279
280
281
282
283
284
285 public int size() {
286 return metadata.size();
287 }
288
289
290
291
292
293
294 public Object[] toArray() {
295 return metadata.values().toArray();
296 }
297
298
299
300
301
302
303 public Map<String, SearchMetadata<?>> toMap() {
304 return metadata;
305 }
306
307
308
309
310 @SuppressWarnings("unchecked")
311 @Override
312 public <T> T[] toArray(T[] arg0) {
313 return (T[]) metadata.values().toArray(new SearchMetadataImpl[metadata.size()]);
314 }
315
316 }