1
22
23 package com.liferay.portal.kernel.search;
24
25 import com.liferay.portal.kernel.util.FileUtil;
26 import com.liferay.portal.kernel.util.StringPool;
27 import com.liferay.portal.kernel.util.Validator;
28
29 import java.io.BufferedInputStream;
30 import java.io.ByteArrayInputStream;
31 import java.io.File;
32 import java.io.FileInputStream;
33 import java.io.IOException;
34 import java.io.InputStream;
35
36 import java.text.ParseException;
37 import java.text.SimpleDateFormat;
38
39 import java.util.Date;
40 import java.util.HashMap;
41 import java.util.Map;
42
43
50 public class DocumentImpl implements Document {
51
52 public void add(Field field) {
53 _fields.put(field.getName(), field);
54 }
55
56 public void addDate(String name, Date value) {
57 if (value == null) {
58 return;
59 }
60
61 addKeyword(name, _sdf.format(value));
62 }
63
64 public void addFile(String name, InputStream is, String fileExt) {
65 addText(name, FileUtil.extractText(is, fileExt));
66 }
67
68 public void addFile(String name, byte[] bytes, String fileExt) {
69 InputStream is = new BufferedInputStream(
70 new ByteArrayInputStream(bytes));
71
72 addFile(name, is, fileExt);
73 }
74
75 public void addFile(String name, File file, String fileExt)
76 throws IOException {
77
78 InputStream is = new FileInputStream(file);
79
80 addFile(name, is, fileExt);
81 }
82
83 public void addKeyword(String name, double value) {
84 addKeyword(name, String.valueOf(value));
85 }
86
87 public void addKeyword(String name, int value) {
88 addKeyword(name, String.valueOf(value));
89 }
90
91 public void addKeyword(String name, long value) {
92 addKeyword(name, String.valueOf(value));
93 }
94
95 public void addKeyword(String name, String value) {
96 _fields.put(name, new Field(name, value, false));
97 }
98
99 public void addKeyword(String name, String[] values) {
100 if (values == null) {
101 return;
102 }
103
104 _fields.put(name, new Field(name, values, false));
105 }
106
107 public void addModifiedDate() {
108 addDate(Field.MODIFIED, new Date());
109 }
110
111 public void addText(String name, String value) {
112 if (Validator.isNotNull(value)) {
113 _fields.put(name, new Field(name, value, true));
114 }
115 }
116
117 public void addUID(String portletId, long field1) {
118 addUID(portletId, String.valueOf(field1));
119 }
120
121 public void addUID(String portletId, Long field1) {
122 addUID(portletId, field1.longValue());
123 }
124
125 public void addUID(String portletId, String field1) {
126 addUID(portletId, field1, null);
127 }
128
129 public void addUID(
130 String portletId, long field1, String field2) {
131
132 addUID(portletId, String.valueOf(field1), field2);
133 }
134
135 public void addUID(
136 String portletId, Long field1, String field2) {
137
138 addUID(portletId, field1.longValue(), field2);
139 }
140
141 public void addUID(
142 String portletId, String field1, String field2) {
143
144 addUID(portletId, field1, field2, null);
145 }
146
147 public void addUID(
148 String portletId, String field1, String field2, String field3) {
149
150 addUID(portletId, field1, field2, field3, null);
151 }
152
153 public void addUID(
154 String portletId, String field1, String field2, String field3,
155 String field4) {
156
157 String uid = portletId + _UID_PORTLET + field1;
158
159 if (field2 != null) {
160 uid += _UID_FIELD + field2;
161 }
162
163 if (field3 != null) {
164 uid += _UID_FIELD + field3;
165 }
166
167 if (field4 != null) {
168 uid += _UID_FIELD + field4;
169 }
170
171 addKeyword(Field.UID, uid);
172 }
173
174 public String get(String name) {
175 Field field = _fields.get(name);
176
177 if (field == null) {
178 return StringPool.BLANK;
179 }
180
181 return field.getValue();
182 }
183
184 public Date getDate(String name) throws ParseException {
185 return _sdf.parse(get(name));
186 }
187
188 public String[] getValues(String name) {
189 Field field = _fields.get(name);
190
191 if (field == null) {
192 return new String[] {StringPool.BLANK};
193 }
194
195 return field.getValues();
196 }
197
198 public Map<String, Field> getFields() {
199 return _fields;
200 }
201
202 public void setFields(Map<String, Field> fields) {
203 _fields = fields;
204 }
205
206 public String toString() {
207 StringBuilder sb = new StringBuilder();
208
209 sb.append(StringPool.OPEN_CURLY_BRACE);
210
211 int i = 0;
212
213 for (Field field : _fields.values()) {
214 if (i > 0) {
215 sb.append(StringPool.COMMA);
216 sb.append(StringPool.SPACE);
217 }
218
219 sb.append(field.getName());
220 sb.append(StringPool.EQUAL);
221 sb.append(field.getValues());
222 }
223
224 sb.append(StringPool.CLOSE_CURLY_BRACE);
225
226 return sb.toString();
227 }
228
229 private static final String _DATE_FORMAT_PATTERN = "yyyyMMddHHmmss";
230
231 private static final String _UID_PORTLET = "_PORTLET_";
232
233 private static final String _UID_FIELD = "_FIELD_";
234
235 private Map<String, Field> _fields = new HashMap<String, Field>();
236 private SimpleDateFormat _sdf = new SimpleDateFormat(_DATE_FORMAT_PATTERN);
237
238 }