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