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, int value) {
127 addKeyword(name, String.valueOf(value));
128 }
129
130 public void addKeyword(String name, int[] values) {
131 if (values == null) {
132 return;
133 }
134
135 addKeyword(name, ArrayUtil.toStringArray(values));
136 }
137
138 public void addKeyword(String name, Integer value) {
139 addKeyword(name, String.valueOf(value));
140 }
141
142 public void addKeyword(String name, Integer[] values) {
143 if (values == null) {
144 return;
145 }
146
147 addKeyword(name, ArrayUtil.toStringArray(values));
148 }
149
150 public void addKeyword(String name, long value) {
151 addKeyword(name, String.valueOf(value));
152 }
153
154 public void addKeyword(String name, Long value) {
155 addKeyword(name, String.valueOf(value));
156 }
157
158 public void addKeyword(String name, long[] values) {
159 if (values == null) {
160 return;
161 }
162
163 addKeyword(name, ArrayUtil.toStringArray(values));
164 }
165
166 public void addKeyword(String name, Long[] values) {
167 if (values == null) {
168 return;
169 }
170
171 addKeyword(name, ArrayUtil.toStringArray(values));
172 }
173
174 public void addKeyword(String name, short value) {
175 addKeyword(name, String.valueOf(value));
176 }
177
178 public void addKeyword(String name, Short value) {
179 addKeyword(name, String.valueOf(value));
180 }
181
182 public void addKeyword(String name, short[] values) {
183 if (values == null) {
184 return;
185 }
186
187 addKeyword(name, ArrayUtil.toStringArray(values));
188 }
189
190 public void addKeyword(String name, Short[] values) {
191 if (values == null) {
192 return;
193 }
194
195 addKeyword(name, ArrayUtil.toStringArray(values));
196 }
197
198 public void addKeyword(String name, String value) {
199 addKeyword(name, value, false);
200 }
201
202 public void addKeyword(String name, String value, boolean lowerCase) {
203 if (lowerCase && Validator.isNotNull(value)) {
204 value = value.toLowerCase();
205 }
206
207 _fields.put(name, new Field(name, value, false));
208 }
209
210 public void addKeyword(String name, String[] values) {
211 if (values == null) {
212 return;
213 }
214
215 _fields.put(name, new Field(name, values, false));
216 }
217
218 public void addModifiedDate() {
219 addModifiedDate(new Date());
220 }
221
222 public void addModifiedDate(Date modifiedDate) {
223 addDate(Field.MODIFIED, modifiedDate);
224 }
225
226 public void addText(String name, String value) {
227 if (Validator.isNotNull(value)) {
228 _fields.put(name, new Field(name, value, true));
229 }
230 }
231
232 public void addUID(String portletId, long field1) {
233 addUID(portletId, String.valueOf(field1));
234 }
235
236 public void addUID(
237 String portletId, long field1, String field2) {
238
239 addUID(portletId, String.valueOf(field1), field2);
240 }
241
242 public void addUID(String portletId, Long field1) {
243 addUID(portletId, field1.longValue());
244 }
245
246 public void addUID(
247 String portletId, Long field1, String field2) {
248
249 addUID(portletId, field1.longValue(), field2);
250 }
251
252 public void addUID(String portletId, String field1) {
253 addUID(portletId, field1, null);
254 }
255
256 public void addUID(
257 String portletId, String field1, String field2) {
258
259 addUID(portletId, field1, field2, null);
260 }
261
262 public void addUID(
263 String portletId, String field1, String field2, String field3) {
264
265 addUID(portletId, field1, field2, field3, null);
266 }
267
268 public void addUID(
269 String portletId, String field1, String field2, String field3,
270 String field4) {
271
272 String uid = portletId + _UID_PORTLET + field1;
273
274 if (field2 != null) {
275 uid += _UID_FIELD + field2;
276 }
277
278 if (field3 != null) {
279 uid += _UID_FIELD + field3;
280 }
281
282 if (field4 != null) {
283 uid += _UID_FIELD + field4;
284 }
285
286 addKeyword(Field.UID, uid);
287 }
288
289 public String get(String name) {
290 Field field = _fields.get(name);
291
292 if (field == null) {
293 return StringPool.BLANK;
294 }
295
296 return field.getValue();
297 }
298
299 public Date getDate(String name) throws ParseException {
300 DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat(
301 _DATE_FORMAT_PATTERN);
302
303 return dateFormat.parse(get(name));
304 }
305
306 public Map<String, Field> getFields() {
307 return _fields;
308 }
309
310 public String getUID() {
311 Field field = _fields.get(Field.UID);
312
313 if (field == null) {
314 throw new RuntimeException("UID is not set");
315 }
316
317 return field.getValue();
318 }
319
320 public String[] getValues(String name) {
321 Field field = _fields.get(name);
322
323 if (field == null) {
324 return new String[] {StringPool.BLANK};
325 }
326
327 return field.getValues();
328 }
329
330 public void setFields(Map<String, Field> fields) {
331 _fields = fields;
332 }
333
334 public String toString() {
335 StringBundler sb = new StringBundler();
336
337 sb.append(StringPool.OPEN_CURLY_BRACE);
338
339 boolean firstField = true;
340
341 for (Field field : _fields.values()) {
342 if (!firstField) {
343 sb.append(StringPool.COMMA);
344 sb.append(StringPool.SPACE);
345 }
346 else {
347 firstField = false;
348 }
349
350 sb.append(field.getName());
351 sb.append(StringPool.EQUAL);
352 sb.append(Arrays.toString(field.getValues()));
353 }
354
355 sb.append(StringPool.CLOSE_CURLY_BRACE);
356
357 return sb.toString();
358 }
359
360 private static final String _DATE_FORMAT_PATTERN = "yyyyMMddHHmmss";
361
362 private static final String _UID_FIELD = "_FIELD_";
363
364 private static final String _UID_PORTLET = "_PORTLET_";
365
366 private Format _dateFormat = FastDateFormatFactoryUtil.getSimpleDateFormat(
367 _DATE_FORMAT_PATTERN);
368 private Map<String, Field> _fields = new HashMap<String, Field>();
369
370 }