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