001
014
015 package com.liferay.portal.kernel.search;
016
017 import com.liferay.portal.kernel.io.unsync.UnsyncByteArrayInputStream;
018 import com.liferay.portal.kernel.util.ArrayUtil;
019 import com.liferay.portal.kernel.util.DateFormatFactoryUtil;
020 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
021 import com.liferay.portal.kernel.util.FileUtil;
022 import com.liferay.portal.kernel.util.StringBundler;
023 import com.liferay.portal.kernel.util.StringPool;
024 import com.liferay.portal.kernel.util.Validator;
025
026 import java.io.File;
027 import java.io.FileInputStream;
028 import java.io.IOException;
029 import java.io.InputStream;
030
031 import java.text.DateFormat;
032 import java.text.Format;
033 import java.text.ParseException;
034
035 import java.util.Arrays;
036 import java.util.Date;
037 import java.util.HashMap;
038 import java.util.Map;
039
040
044 public class DocumentImpl implements Document {
045
046 public void add(Field field) {
047 _fields.put(field.getName(), field);
048 }
049
050 public void addDate(String name, Date value) {
051 if (value == null) {
052 return;
053 }
054
055 addKeyword(name, _dateFormat.format(value));
056 }
057
058 public void addFile(String name, byte[] bytes, String fileExt) {
059 InputStream is = new UnsyncByteArrayInputStream(bytes);
060
061 addFile(name, is, fileExt);
062 }
063
064 public void addFile(String name, File file, String fileExt)
065 throws IOException {
066
067 InputStream is = new FileInputStream(file);
068
069 addFile(name, is, fileExt);
070 }
071
072 public void addFile(String name, InputStream is, String fileExt) {
073 addText(name, FileUtil.extractText(is, fileExt));
074 }
075
076 public void addKeyword(String name, boolean value) {
077 addKeyword(name, String.valueOf(value));
078 }
079
080 public void addKeyword(String name, Boolean value) {
081 addKeyword(name, String.valueOf(value));
082 }
083
084 public void addKeyword(String name, boolean[] values) {
085 if (values == null) {
086 return;
087 }
088
089 addKeyword(name, ArrayUtil.toStringArray(values));
090 }
091
092 public void addKeyword(String name, Boolean[] values) {
093 if (values == null) {
094 return;
095 }
096
097 addKeyword(name, ArrayUtil.toStringArray(values));
098 }
099
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, float value) {
125 addKeyword(name, String.valueOf(value));
126 }
127
128 public void addKeyword(String name, Float value) {
129 addKeyword(name, String.valueOf(value));
130 }
131
132 public void addKeyword(String name, float[] values) {
133 if (values == null) {
134 return;
135 }
136
137 addKeyword(name, ArrayUtil.toStringArray(values));
138 }
139
140 public void addKeyword(String name, Float[] values) {
141 if (values == null) {
142 return;
143 }
144
145 addKeyword(name, ArrayUtil.toStringArray(values));
146 }
147
148 public void addKeyword(String name, int value) {
149 addKeyword(name, String.valueOf(value));
150 }
151
152 public void addKeyword(String name, int[] values) {
153 if (values == null) {
154 return;
155 }
156
157 addKeyword(name, ArrayUtil.toStringArray(values));
158 }
159
160 public void addKeyword(String name, Integer value) {
161 addKeyword(name, String.valueOf(value));
162 }
163
164 public void addKeyword(String name, Integer[] values) {
165 if (values == null) {
166 return;
167 }
168
169 addKeyword(name, ArrayUtil.toStringArray(values));
170 }
171
172 public void addKeyword(String name, long value) {
173 addKeyword(name, String.valueOf(value));
174 }
175
176 public void addKeyword(String name, Long value) {
177 addKeyword(name, String.valueOf(value));
178 }
179
180 public void addKeyword(String name, long[] values) {
181 if (values == null) {
182 return;
183 }
184
185 addKeyword(name, ArrayUtil.toStringArray(values));
186 }
187
188 public void addKeyword(String name, Long[] values) {
189 if (values == null) {
190 return;
191 }
192
193 addKeyword(name, ArrayUtil.toStringArray(values));
194 }
195
196 public void addKeyword(String name, short value) {
197 addKeyword(name, String.valueOf(value));
198 }
199
200 public void addKeyword(String name, Short value) {
201 addKeyword(name, String.valueOf(value));
202 }
203
204 public void addKeyword(String name, short[] values) {
205 if (values == null) {
206 return;
207 }
208
209 addKeyword(name, ArrayUtil.toStringArray(values));
210 }
211
212 public void addKeyword(String name, Short[] values) {
213 if (values == null) {
214 return;
215 }
216
217 addKeyword(name, ArrayUtil.toStringArray(values));
218 }
219
220 public void addKeyword(String name, String value) {
221 addKeyword(name, value, false);
222 }
223
224 public void addKeyword(String name, String value, boolean lowerCase) {
225 if (lowerCase && Validator.isNotNull(value)) {
226 value = value.toLowerCase();
227 }
228
229 _fields.put(name, new Field(name, value, false));
230 }
231
232 public void addKeyword(String name, String[] values) {
233 if (values == null) {
234 return;
235 }
236
237 _fields.put(name, new Field(name, values, false));
238 }
239
240 public void addModifiedDate() {
241 addModifiedDate(new Date());
242 }
243
244 public void addModifiedDate(Date modifiedDate) {
245 addDate(Field.MODIFIED, modifiedDate);
246 }
247
248 public void addText(String name, String value) {
249 if (Validator.isNotNull(value)) {
250 _fields.put(name, new Field(name, value, true));
251 }
252 }
253
254 public void addUID(String portletId, long field1) {
255 addUID(portletId, String.valueOf(field1));
256 }
257
258 public void addUID(
259 String portletId, long field1, String field2) {
260
261 addUID(portletId, String.valueOf(field1), field2);
262 }
263
264 public void addUID(String portletId, Long field1) {
265 addUID(portletId, field1.longValue());
266 }
267
268 public void addUID(
269 String portletId, Long field1, String field2) {
270
271 addUID(portletId, field1.longValue(), field2);
272 }
273
274 public void addUID(String portletId, String field1) {
275 addUID(portletId, field1, null);
276 }
277
278 public void addUID(
279 String portletId, String field1, String field2) {
280
281 addUID(portletId, field1, field2, null);
282 }
283
284 public void addUID(
285 String portletId, String field1, String field2, String field3) {
286
287 addUID(portletId, field1, field2, field3, null);
288 }
289
290 public void addUID(
291 String portletId, String field1, String field2, String field3,
292 String field4) {
293
294 String uid = portletId + _UID_PORTLET + field1;
295
296 if (field2 != null) {
297 uid += _UID_FIELD + field2;
298 }
299
300 if (field3 != null) {
301 uid += _UID_FIELD + field3;
302 }
303
304 if (field4 != null) {
305 uid += _UID_FIELD + field4;
306 }
307
308 addKeyword(Field.UID, uid);
309 }
310
311 public String get(String name) {
312 Field field = _fields.get(name);
313
314 if (field == null) {
315 return StringPool.BLANK;
316 }
317
318 return field.getValue();
319 }
320
321 public Date getDate(String name) throws ParseException {
322 DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat(
323 _DATE_FORMAT_PATTERN);
324
325 return dateFormat.parse(get(name));
326 }
327
328 public Map<String, Field> getFields() {
329 return _fields;
330 }
331
332 public String getUID() {
333 Field field = _fields.get(Field.UID);
334
335 if (field == null) {
336 throw new RuntimeException("UID is not set");
337 }
338
339 return field.getValue();
340 }
341
342 public String[] getValues(String name) {
343 Field field = _fields.get(name);
344
345 if (field == null) {
346 return new String[] {StringPool.BLANK};
347 }
348
349 return field.getValues();
350 }
351
352 public void setFields(Map<String, Field> fields) {
353 _fields = fields;
354 }
355
356 public String toString() {
357 StringBundler sb = new StringBundler();
358
359 sb.append(StringPool.OPEN_CURLY_BRACE);
360
361 boolean firstField = true;
362
363 for (Field field : _fields.values()) {
364 if (!firstField) {
365 sb.append(StringPool.COMMA);
366 sb.append(StringPool.SPACE);
367 }
368 else {
369 firstField = false;
370 }
371
372 sb.append(field.getName());
373 sb.append(StringPool.EQUAL);
374 sb.append(Arrays.toString(field.getValues()));
375 }
376
377 sb.append(StringPool.CLOSE_CURLY_BRACE);
378
379 return sb.toString();
380 }
381
382 private static final String _DATE_FORMAT_PATTERN = "yyyyMMddHHmmss";
383
384 private static final String _UID_FIELD = "_FIELD_";
385
386 private static final String _UID_PORTLET = "_PORTLET_";
387
388 private Format _dateFormat = FastDateFormatFactoryUtil.getSimpleDateFormat(
389 _DATE_FORMAT_PATTERN);
390
391 private Map<String, Field> _fields = new HashMap<String, Field>();
392
393 }