1 package org.kuali.ole.docstore.common.search;
2
3
4 import org.apache.log4j.Logger;
5 import org.kuali.ole.docstore.common.document.content.enums.DocType;
6 import org.kuali.ole.docstore.common.document.factory.JAXBContextFactory;
7
8 import java.io.ByteArrayInputStream;
9 import java.io.StringWriter;
10 import java.util.*;
11 import javax.xml.bind.Marshaller;
12 import javax.xml.bind.Unmarshaller;
13 import javax.xml.bind.annotation.*;
14 import javax.xml.transform.stream.StreamSource;
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 @XmlAccessorType(XmlAccessType.FIELD)
39 @XmlType(name = "searchParams", propOrder = {
40 "docType",
41 "pageSize",
42 "searchConditions",
43 "facetConditions",
44 "searchResultFields",
45 "sortConditions",
46 "facetFields",
47 "startIndex",
48 "facetLimit",
49 "facetPrefix",
50 "facetSort",
51 "facetOffset"
52 })
53
54 @XmlRootElement
55 public class SearchParams {
56
57 private static final Logger LOG = Logger.getLogger(SearchParams.class);
58 protected String docType = "";
59 protected int pageSize = 0;
60 @XmlElementWrapper(name = "facetConditions")
61 @XmlElement(name = "facetCondition")
62 protected List<FacetCondition> facetConditions;
63 @XmlElementWrapper(name = "searchConditions")
64 @XmlElement(name = "searchCondition")
65 protected List<SearchCondition> searchConditions=new ArrayList<SearchCondition>();
66 @XmlElementWrapper(name = "searchResultFields")
67 @XmlElement(name = "searchResultField")
68 protected List<SearchResultField> searchResultFields;
69 @XmlElementWrapper(name = "sortConditions")
70 @XmlElement(name = "sortCondition")
71 protected List<SortCondition> sortConditions;
72 protected TreeSet<String> facetFields;
73 protected int startIndex = 0;
74 protected int facetLimit =0;
75 protected String facetPrefix;
76 protected String facetSort = "count";
77 protected int facetOffset = 0;
78
79 public int getFacetLimit() {
80 return facetLimit;
81 }
82
83 public SearchParams() {
84
85 }
86
87
88
89 public void setFacetLimit(int facetLimit) {
90 this.facetLimit = facetLimit;
91 }
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 public List<FacetCondition> getFacetConditions() {
114 if (facetConditions == null) {
115 facetConditions = new ArrayList<FacetCondition>();
116 }
117 return this.facetConditions;
118 }
119
120 public String getDocType() {
121 return docType;
122 }
123
124 public void setDocType(String docType) {
125 this.docType = docType;
126 }
127
128
129
130
131 public int getPageSize() {
132 return pageSize;
133 }
134
135
136
137
138 public void setPageSize(int value) {
139 this.pageSize = value;
140 }
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162 public List<SearchCondition> getSearchConditions() {
163 if (searchConditions == null) {
164 searchConditions = new ArrayList<SearchCondition>();
165 }
166 return this.searchConditions;
167 }
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 public List<SearchResultField> getSearchResultFields() {
190 if (searchResultFields == null) {
191 searchResultFields = new ArrayList<SearchResultField>();
192 }
193 return this.searchResultFields;
194 }
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216 public List<SortCondition> getSortConditions() {
217 if (sortConditions == null) {
218 sortConditions = new ArrayList<SortCondition>();
219 }
220 return this.sortConditions;
221 }
222
223 public TreeSet<String> getFacetFields() {
224 if(facetFields == null) {
225 facetFields = new TreeSet<>();
226 }
227 return facetFields;
228 }
229
230
231
232
233 public int getStartIndex() {
234 return startIndex;
235 }
236
237
238
239
240 public void setStartIndex(int value) {
241 this.startIndex = value;
242 }
243
244 public String getFacetPrefix() {
245 return facetPrefix;
246 }
247
248 public void setFacetPrefix(String facetPrefix) {
249 this.facetPrefix = facetPrefix;
250 }
251
252 public String getFacetSort() {
253 return facetSort;
254 }
255
256 public void setFacetSort(String facetSort) {
257 this.facetSort = facetSort;
258 }
259
260 public int getFacetOffset() {
261 return facetOffset;
262 }
263
264 public void setFacetOffset(int facetOffset) {
265 this.facetOffset = facetOffset;
266 }
267
268 public SearchCondition buildSearchCondition(String searchScope, SearchField searchField, String operator) {
269 SearchCondition searchCondition = new SearchCondition();
270 searchCondition.setSearchScope(searchScope);
271 searchCondition.setSearchField(searchField);
272 searchCondition.setOperator(operator);
273 return searchCondition;
274 }
275
276 public SearchField buildSearchField(String docType, String fieldName, String fieldValue) {
277 SearchField searchField = new SearchField();
278 searchField.setDocType(docType);
279 searchField.setFieldName(fieldName);
280 searchField.setFieldValue(fieldValue);
281 return searchField;
282 }
283
284 public SortCondition buildSortCondition(String sortField, String sortOrder) {
285 SortCondition sortCondition = new SortCondition();
286 sortCondition.setSortOrder(sortOrder);
287 sortCondition.setSortField(sortField);
288 return sortCondition;
289 }
290
291 public SearchResultField buildSearchResultField(String docType, String fieldName) {
292 SearchResultField searchResultField = new SearchResultField();
293 searchResultField.setDocType(docType);
294 searchResultField.setFieldName(fieldName);
295 return searchResultField;
296 }
297
298 public String serialize(Object object) {
299 String result = null;
300 SearchParams searchParams = (SearchParams) object;
301 try {
302 StringWriter sw = new StringWriter();
303 JAXBContextFactory jaxbContextFactory = JAXBContextFactory.getInstance();
304 Marshaller jaxbMarshaller = jaxbContextFactory.getMarshaller(SearchParams.class);
305 synchronized (jaxbMarshaller) {
306 jaxbMarshaller.marshal(searchParams, sw);
307 }
308 result = sw.toString();
309 } catch (Exception e) {
310 LOG.error("Exception :", e);
311 }
312 return result;
313 }
314
315
316 public Object deserialize(String content) {
317 SearchParams searchParams = new SearchParams();
318 try {
319 Unmarshaller unmarshaller = JAXBContextFactory.getInstance().getUnMarshaller(SearchParams.class);
320 ByteArrayInputStream input = new ByteArrayInputStream(content.getBytes("UTF-8"));
321 synchronized (unmarshaller) {
322 searchParams = unmarshaller.unmarshal(new StreamSource(input), SearchParams.class).getValue();
323 }
324
325 } catch (Exception e) {
326 LOG.error("Exception :", e);
327 }
328 return searchParams;
329 }
330
331 public void buildSearchParams(SearchParams searchParams, String docType){
332
333 if(DocType.BIB.getCode().equalsIgnoreCase(docType)){
334 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocalId_display"));
335 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_sort"));
336 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_display"));
337 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "JournalTitle_display"));
338 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Author_display"));
339 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Publisher_display"));
340 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ISBN_display"));
341 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ISSN_display"));
342 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Subject_display"));
343 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Publisher_display"));
344 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "PublicationDate_display"));
345 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Edition_display"));
346 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Format_display"));
347 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Language_display"));
348 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Description_display"));
349 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "FormGenre_display"));
350 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DocFormat"));
351 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "staffOnlyFlag"));
352 } else if(DocType.HOLDINGS.getCode().equalsIgnoreCase(docType)){
353 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocalId_display"));
354 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_sort"));
355 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_display"));
356 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumber_display"));
357 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumberPrefix_display"));
358 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ClassificationPart_display"));
359 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingOrder_display"));
360 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingOrderCode_display"));
361 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeCode_display"));
362 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeValue_display"));
363 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Uri_display"));
364 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ReceiptStatus_display"));
365 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CopyNumber_display"));
366 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display"));
367 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DocFormat"));
368 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "bibIdentifier"));
369 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "itemIdentifier"));
370 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "holdingsIdentifier"));
371 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display"));
372 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocationLevelName_display"));
373 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "HoldingsNote_display"));
374 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "staffOnlyFlag"));
375 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "isSeries"));
376 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "isAnalytic"));
377 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "isBoundwith"));
378 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ExtentOfOwnership_Type_display"));
379 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ExtentOfOwnership_Note_Value_display"));
380 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ExtentOfOwnership_Note_Type_display"));
381 } else if(DocType.EHOLDINGS.getCode().equalsIgnoreCase(docType)){
382 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocalId_display"));
383 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_sort"));
384 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_display"));
385 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "AccessStatus_display"));
386 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Platform_display"));
387 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Imprint_display"));
388 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "StatisticalSearchingFullValue_display"));
389 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "StatisticalSearchingCodeValue_display"));
390 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DocFormat"));
391 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "bibIdentifier"));
392 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "holdingsIdentifier"));
393 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "staffOnlyFlag"));
394 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display"));
395 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocationLevelName_display"));
396 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumber_display"));
397 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumberPrefix_display"));
398 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeCode_display"));
399 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeValue_display"));
400 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Access_Password_display"));
401 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Access_UserName_display"));
402 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "AccessLocation_display"));
403 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Admin_Password_display"));
404 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Admin_url_display"));
405 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Admin_UserName_display"));
406 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Authentication_display"));
407 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CoverageDate_display"));
408 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DonorCode_display"));
409 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DonorPublic_display"));
410 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DonorNote_display"));
411 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "E_Publisher_display"));
412 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "HoldingsNote_display"));
413 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ILL_display"));
414 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemPart_display"));
415 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Link_Text_display"));
416 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "NumberOfSimultaneousUses_display"));
417 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "PerpetualAccess_display"));
418 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Persist_Link_display"));
419 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Proxied_display"));
420 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ReceiptStatus_display"));
421 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Subscription_display"));
422 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Url_display"));
423 } else if(DocType.ITEM.getCode().equalsIgnoreCase(docType)){
424 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocalId_display"));
425 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_sort"));
426 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_display"));
427 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display"));
428 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumber_display"));
429 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumberPrefix_display"));
430 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ClassificationPart_display"));
431 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingOrder_display"));
432 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingOrderCode_display"));
433 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeCode_display"));
434 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeValue_display"));
435 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DocFormat"));
436 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "bibIdentifier"));
437 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "holdingsIdentifier"));
438 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "id"));
439 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemBarcode_display"));
440 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemStatus_display"));
441 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display"));
442 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemUri_display"));
443 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CopyNumber_display"));
444 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CopyNumberLabel_display"));
445 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "VolumeNumber_display"));
446 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "VolumeNumberLabel_display"));
447 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Enumeration_display"));
448 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Chronology_display"));
449 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "staffOnlyFlag"));
450 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "isAnalytic"));
451 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemTypeCodeValue_display"));
452 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemTypeFullValue_display"));
453 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemType_display"));
454 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "dueDateTime"));
455 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DonorCode_display"));
456 }
457 }
458
459 }