1
14
15 package com.liferay.portal.kernel.search;
16
17 import com.liferay.portal.kernel.io.unsync.UnsyncByteArrayInputStream;
18 import com.liferay.portal.kernel.util.ArrayUtil;
19 import com.liferay.portal.kernel.util.DateFormatFactoryUtil;
20 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
21 import com.liferay.portal.kernel.util.FileUtil;
22 import com.liferay.portal.kernel.util.StringBundler;
23 import com.liferay.portal.kernel.util.StringPool;
24 import com.liferay.portal.kernel.util.Validator;
25
26 import java.io.File;
27 import java.io.FileInputStream;
28 import java.io.IOException;
29 import java.io.InputStream;
30
31 import java.text.DateFormat;
32 import java.text.Format;
33 import java.text.ParseException;
34
35 import java.util.Arrays;
36 import java.util.Date;
37 import java.util.HashMap;
38 import java.util.Map;
39
40
46 public class DocumentImpl implements Document {
47
48 public void add(Field field) {
49 _fields.put(field.getName(), field);
50 }
51
52 public void addDate(String name, Date value) {
53 if (value == null) {
54 return;
55 }
56
57 addKeyword(name, _dateFormat.format(value));
58 }
59
60 public void addFile(String name, byte[] bytes, String fileExt) {
61 InputStream is = new UnsyncByteArrayInputStream(bytes);
62
63 addFile(name, is, fileExt);
64 }
65
66 public void addFile(String name, File file, String fileExt)
67 throws IOException {
68
69 InputStream is = new FileInputStream(file);
70
71 addFile(name, is, fileExt);
72 }
73
74 public void addFile(String name, InputStream is, String fileExt) {
75 addText(name, FileUtil.extractText(is, fileExt));
76 }
77
78 public void addKeyword(String name, boolean value) {
79 addKeyword(name, String.valueOf(value));
80 }
81
82 public void addKeyword(String name, Boolean value) {
83 addKeyword(name, String.valueOf(value));
84 }
85
86 public void addKeyword(String name, boolean[] values) {
87 if (values == null) {
88 return;
89 }
90
91 addKeyword(name, ArrayUtil.toStringArray(values));
92 }
93
94 public void addKeyword(String name, Boolean[] values) {
95 if (values == null) {
96 return;
97 }
98
99 addKeyword(name, ArrayUtil.toStringArray(values));
100 }
101
102 public void addKeyword(String name, double value) {
103 addKeyword(name, String.valueOf(value));
104 }
105
106 public void addKeyword(String name, Double value) {
107 addKeyword(name, String.valueOf(value));
108 }
109
110 public void addKeyword(String name, double[] values) {
111 if (values == null) {
112 return;
113 }
114
115 addKeyword(name, ArrayUtil.toStringArray(values));
116 }
117
118 public void addKeyword(String name, Double[] values) {
119 if (values == null) {
120 return;
121 }
122
123 addKeyword(name, ArrayUtil.toStringArray(values));
124 }
125
126 public void addKeyword(String name, float value) {
127 addKeyword(name, String.valueOf(value));
128 }
129
130 public void addKeyword(String name, Float value) {
131 addKeyword(name, String.valueOf(value));
132 }
133
134 public void addKeyword(String name, float[] values) {
135 if (values == null) {
136 return;
137 }
138
139 addKeyword(name, ArrayUtil.toStringArray(values));
140 }
141
142 public void addKeyword(String name, Float[] values) {
143 if (values == null) {
144 return;
145 }
146
147 addKeyword(name, ArrayUtil.toStringArray(values));
148 }
149
150 public void addKeyword(String name, int value) {
151 addKeyword(name, String.valueOf(value));
152 }
153
154 public void addKeyword(String name, int[] values) {
155 if (values == null) {
156 return;
157 }
158
159 addKeyword(name, ArrayUtil.toStringArray(values));
160 }
161
162 public void addKeyword(String name, Integer value) {
163 addKeyword(name, String.valueOf(value));
164 }
165
166 public void addKeyword(String name, Integer[] values) {
167 if (values == null) {
168 return;
169 }
170
171 addKeyword(name, ArrayUtil.toStringArray(values));
172 }
173
174 public void addKeyword(String name, long value) {
175 addKeyword(name, String.valueOf(value));
176 }
177
178 public void addKeyword(String name, Long value) {
179 addKeyword(name, String.valueOf(value));
180 }
181
182 public void addKeyword(String name, long[] values) {
183 if (values == null) {
184 return;
185 }
186
187 addKeyword(name, ArrayUtil.toStringArray(values));
188 }
189
190 public void addKeyword(String name, Long[] values) {
191 if (values == null) {
192 return;
193 }
194
195 addKeyword(name, ArrayUtil.toStringArray(values));
196 }
197
198 public void addKeyword(String name, short value) {
199 addKeyword(name, String.valueOf(value));
200 }
201
202 public void addKeyword(String name, Short value) {
203 addKeyword(name, String.valueOf(value));
204 }
205
206 public void addKeyword(String name, short[] values) {
207 if (values == null) {
208 return;
209 }
210
211 addKeyword(name, ArrayUtil.toStringArray(values));
212 }
213
214 public void addKeyword(String name, Short[] values) {
215 if (values == null) {
216 return;
217 }
218
219 addKeyword(name, ArrayUtil.toStringArray(values));
220 }
221
222 public void addKeyword(String name, String value) {
223 addKeyword(name, value, false);
224 }
225
226 public void addKeyword(String name, String value, boolean lowerCase) {
227 if (lowerCase && Validator.isNotNull(value)) {
228 value = value.toLowerCase();
229 }
230
231 _fields.put(name, new Field(name, value, false));
232 }
233
234 public void addKeyword(String name, String[] values) {
235 if (values == null) {
236 return;
237 }
238
239 _fields.put(name, new Field(name, values, false));
240 }
241
242 public void addModifiedDate() {
243 addModifiedDate(new Date());
244 }
245
246 public void addModifiedDate(Date modifiedDate) {
247 addDate(Field.MODIFIED, modifiedDate);
248 }
249
250 public void addText(String name, String value) {
251 if (Validator.isNotNull(value)) {
252 _fields.put(name, new Field(name, value, true));
253 }
254 }
255
256 public void addUID(String portletId, long field1) {
257 addUID(portletId, String.valueOf(field1));
258 }
259
260 public void addUID(
261 String portletId, long field1, String field2) {
262
263 addUID(portletId, String.valueOf(field1), field2);
264 }
265
266 public void addUID(String portletId, Long field1) {
267 addUID(portletId, field1.longValue());
268 }
269
270 public void addUID(
271 String portletId, Long field1, String field2) {
272
273 addUID(portletId, field1.longValue(), field2);
274 }
275
276 public void addUID(String portletId, String field1) {
277 addUID(portletId, field1, null);
278 }
279
280 public void addUID(
281 String portletId, String field1, String field2) {
282
283 addUID(portletId, field1, field2, null);
284 }
285
286 public void addUID(
287 String portletId, String field1, String field2, String field3) {
288
289 addUID(portletId, field1, field2, field3, null);
290 }
291
292 public void addUID(
293 String portletId, String field1, String field2, String field3,
294 String field4) {
295
296 String uid = portletId + _UID_PORTLET + field1;
297
298 if (field2 != null) {
299 uid += _UID_FIELD + field2;
300 }
301
302 if (field3 != null) {
303 uid += _UID_FIELD + field3;
304 }
305
306 if (field4 != null) {
307 uid += _UID_FIELD + field4;
308 }
309
310 addKeyword(Field.UID, uid);
311 }
312
313 public String get(String name) {
314 Field field = _fields.get(name);
315
316 if (field == null) {
317 return StringPool.BLANK;
318 }
319
320 return field.getValue();
321 }
322
323 public Date getDate(String name) throws ParseException {
324 DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat(
325 _DATE_FORMAT_PATTERN);
326
327 return dateFormat.parse(get(name));
328 }
329
330 public Map<String, Field> getFields() {
331 return _fields;
332 }
333
334 public String[] getValues(String name) {
335 Field field = _fields.get(name);
336
337 if (field == null) {
338 return new String[] {StringPool.BLANK};
339 }
340
341 return field.getValues();
342 }
343
344 public void setFields(Map<String, Field> fields) {
345 _fields = fields;
346 }
347
348 public String toString() {
349 StringBundler sb = new StringBundler();
350
351 sb.append(StringPool.OPEN_CURLY_BRACE);
352
353 boolean firstField = true;
354
355 for (Field field : _fields.values()) {
356 if (!firstField) {
357 sb.append(StringPool.COMMA);
358 sb.append(StringPool.SPACE);
359 }
360 else {
361 firstField = false;
362 }
363
364 sb.append(field.getName());
365 sb.append(StringPool.EQUAL);
366 sb.append(Arrays.toString(field.getValues()));
367 }
368
369 sb.append(StringPool.CLOSE_CURLY_BRACE);
370
371 return sb.toString();
372 }
373
374 private static final String _DATE_FORMAT_PATTERN = "yyyyMMddHHmmss";
375
376 private static final String _UID_FIELD = "_FIELD_";
377
378 private static final String _UID_PORTLET = "_PORTLET_";
379
380 private Format _dateFormat = FastDateFormatFactoryUtil.getSimpleDateFormat(
381 _DATE_FORMAT_PATTERN);
382 private Map<String, Field> _fields = new HashMap<String, Field>();
383
384 }