001package org.kuali.ole.docstore.common.search; 002 003 004import org.apache.log4j.Logger; 005import org.kuali.ole.docstore.common.document.content.enums.DocType; 006 007import java.io.ByteArrayInputStream; 008import java.io.StringWriter; 009import java.util.*; 010import javax.xml.bind.JAXBContext; 011import javax.xml.bind.JAXBElement; 012import javax.xml.bind.Marshaller; 013import javax.xml.bind.Unmarshaller; 014import javax.xml.bind.annotation.*; 015import javax.xml.transform.stream.StreamSource; 016 017 018/** 019 * <p>Java class for searchParams complex type. 020 * <p/> 021 * <p>The following schema fragment specifies the expected content contained within this class. 022 * <p/> 023 * <pre> 024 * <complexType name="searchParams"> 025 * <complexContent> 026 * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 027 * <sequence> 028 * <element name="pageSize" type="{http://www.w3.org/2001/XMLSchema}int"/> 029 * <element name="searchConditions" type="{}searchCondition" maxOccurs="unbounded" minOccurs="0"/> 030 * <element name="searchResultFields" type="{}searchResultField" maxOccurs="unbounded" minOccurs="0"/> 031 * <element name="sortConditions" type="{}sortCondition" maxOccurs="unbounded" minOccurs="0"/> 032 * <element name="startIndex" type="{http://www.w3.org/2001/XMLSchema}int"/> 033 * </sequence> 034 * </restriction> 035 * </complexContent> 036 * </complexType> 037 * </pre> 038 */ 039@XmlAccessorType(XmlAccessType.FIELD) 040@XmlType(name = "searchParams", propOrder = { 041 "pageSize", 042 "searchConditions", 043 "facetConditions", 044 "searchResultFields", 045 "sortConditions", 046 "facetFields", 047 "startIndex", 048 "facetLimit", 049 "facetPrefix", 050 "facetSort", 051 "facetOffset" 052}) 053 054@XmlRootElement 055public class SearchParams { 056 057 private static final Logger LOG = Logger.getLogger(SearchParams.class); 058 protected int pageSize = 0; 059 @XmlElementWrapper(name = "facetConditions") 060 @XmlElement(name = "facetCondition") 061 protected List<FacetCondition> facetConditions; 062 @XmlElementWrapper(name = "searchConditions") 063 @XmlElement(name = "searchCondition") 064 protected List<SearchCondition> searchConditions=new ArrayList<SearchCondition>(); 065 @XmlElementWrapper(name = "searchResultFields") 066 @XmlElement(name = "searchResultField") 067 protected List<SearchResultField> searchResultFields; 068 @XmlElementWrapper(name = "sortConditions") 069 @XmlElement(name = "sortCondition") 070 protected List<SortCondition> sortConditions; 071 protected TreeSet<String> facetFields; 072 protected int startIndex = 0; 073 protected int facetLimit =0; 074 protected String facetPrefix; 075 protected String facetSort = "count"; 076 protected int facetOffset = 0; 077 078 public int getFacetLimit() { 079 return facetLimit; 080 } 081 082 public SearchParams() { 083 084 } 085 086 087 088 public void setFacetLimit(int facetLimit) { 089 this.facetLimit = facetLimit; 090 } 091 092 /** 093 * Gets the value of the facetCondtions property. 094 * <p/> 095 * <p/> 096 * This accessor method returns a reference to the live list, 097 * not a snapshot. Therefore any modification you make to the 098 * returned list will be present inside the JAXB object. 099 * This is why there is not a <CODE>set</CODE> method for the facetCondtions property. 100 * <p/> 101 * <p/> 102 * For example, to add a new item, do as follows: 103 * <pre> 104 * getFacetCondtions().add(newItem); 105 * </pre> 106 * <p/> 107 * <p/> 108 * <p/> 109 * Objects of the following type(s) are allowed in the list 110 * {@link FacetCondition} 111 */ 112 public List<FacetCondition> getFacetConditions() { 113 if (facetConditions == null) { 114 facetConditions = new ArrayList<FacetCondition>(); 115 } 116 return this.facetConditions; 117 } 118 119 /** 120 * Gets the value of the pageSize property. 121 */ 122 public int getPageSize() { 123 return pageSize; 124 } 125 126 /** 127 * Sets the value of the pageSize property. 128 */ 129 public void setPageSize(int value) { 130 this.pageSize = value; 131 } 132 133 /** 134 * Gets the value of the searchConditions property. 135 * <p/> 136 * <p/> 137 * This accessor method returns a reference to the live list, 138 * not a snapshot. Therefore any modification you make to the 139 * returned list will be present inside the JAXB object. 140 * This is why there is not a <CODE>set</CODE> method for the searchConditions property. 141 * <p/> 142 * <p/> 143 * For example, to add a new item, do as follows: 144 * <pre> 145 * getSearchConditions().add(newItem); 146 * </pre> 147 * <p/> 148 * <p/> 149 * <p/> 150 * Objects of the following type(s) are allowed in the list 151 * {@link SearchCondition } 152 */ 153 public List<SearchCondition> getSearchConditions() { 154 if (searchConditions == null) { 155 searchConditions = new ArrayList<SearchCondition>(); 156 } 157 return this.searchConditions; 158 } 159 160 /** 161 * Gets the value of the searchResultFields property. 162 * <p/> 163 * <p/> 164 * This accessor method returns a reference to the live list, 165 * not a snapshot. Therefore any modification you make to the 166 * returned list will be present inside the JAXB object. 167 * This is why there is not a <CODE>set</CODE> method for the searchResultFields property. 168 * <p/> 169 * <p/> 170 * For example, to add a new item, do as follows: 171 * <pre> 172 * getSearchResultFields().add(newItem); 173 * </pre> 174 * <p/> 175 * <p/> 176 * <p/> 177 * Objects of the following type(s) are allowed in the list 178 * {@link SearchResultField } 179 */ 180 public List<SearchResultField> getSearchResultFields() { 181 if (searchResultFields == null) { 182 searchResultFields = new ArrayList<SearchResultField>(); 183 } 184 return this.searchResultFields; 185 } 186 187 /** 188 * Gets the value of the sortConditions property. 189 * <p/> 190 * <p/> 191 * This accessor method returns a reference to the live list, 192 * not a snapshot. Therefore any modification you make to the 193 * returned list will be present inside the JAXB object. 194 * This is why there is not a <CODE>set</CODE> method for the sortConditions property. 195 * <p/> 196 * <p/> 197 * For example, to add a new item, do as follows: 198 * <pre> 199 * getSortConditions().add(newItem); 200 * </pre> 201 * <p/> 202 * <p/> 203 * <p/> 204 * Objects of the following type(s) are allowed in the list 205 * {@link SortCondition } 206 */ 207 public List<SortCondition> getSortConditions() { 208 if (sortConditions == null) { 209 sortConditions = new ArrayList<SortCondition>(); 210 } 211 return this.sortConditions; 212 } 213 214 public TreeSet<String> getFacetFields() { 215 if(facetFields == null) { 216 facetFields = new TreeSet<>(); 217 } 218 return facetFields; 219 } 220 221 /** 222 * Gets the value of the startIndex property. 223 */ 224 public int getStartIndex() { 225 return startIndex; 226 } 227 228 /** 229 * Sets the value of the startIndex property. 230 */ 231 public void setStartIndex(int value) { 232 this.startIndex = value; 233 } 234 235 public String getFacetPrefix() { 236 return facetPrefix; 237 } 238 239 public void setFacetPrefix(String facetPrefix) { 240 this.facetPrefix = facetPrefix; 241 } 242 243 public String getFacetSort() { 244 return facetSort; 245 } 246 247 public void setFacetSort(String facetSort) { 248 this.facetSort = facetSort; 249 } 250 251 public int getFacetOffset() { 252 return facetOffset; 253 } 254 255 public void setFacetOffset(int facetOffset) { 256 this.facetOffset = facetOffset; 257 } 258 259 public SearchCondition buildSearchCondition(String searchScope, SearchField searchField, String operator) { 260 SearchCondition searchCondition = new SearchCondition(); 261 searchCondition.setSearchScope(searchScope); 262 searchCondition.setSearchField(searchField); 263 searchCondition.setOperator(operator); 264 return searchCondition; 265 } 266 267 public SearchField buildSearchField(String docType, String fieldName, String fieldValue) { 268 SearchField searchField = new SearchField(); 269 searchField.setDocType(docType); 270 searchField.setFieldName(fieldName); 271 searchField.setFieldValue(fieldValue); 272 return searchField; 273 } 274 275 public SortCondition buildSortCondition(String sortField, String sortOrder) { 276 SortCondition sortCondition = new SortCondition(); 277 sortCondition.setSortOrder(sortOrder); 278 sortCondition.setSortField(sortField); 279 return sortCondition; 280 } 281 282 public SearchResultField buildSearchResultField(String docType, String fieldName) { 283 SearchResultField searchResultField = new SearchResultField(); 284 searchResultField.setDocType(docType); 285 searchResultField.setFieldName(fieldName); 286 return searchResultField; 287 } 288 289 public String serialize(Object object) { 290 String result = null; 291 StringWriter sw = new StringWriter(); 292 SearchParams searchParams = (SearchParams) object; 293 try { 294 JAXBContext jaxbContext = JAXBContext.newInstance(SearchParams.class); 295 Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 296 jaxbMarshaller.marshal(searchParams, sw); 297 result = sw.toString(); 298 } catch (Exception e) { 299 LOG.error("Exception ", e); 300 } 301 return result; 302 } 303 304 public Object deserialize(String content) { 305 306 JAXBElement<SearchParams> SearchParamsElement = null; 307 try { 308 JAXBContext jaxbContext = JAXBContext.newInstance(SearchParams.class); 309 Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 310 ByteArrayInputStream input = new ByteArrayInputStream(content.getBytes("UTF-8")); 311 SearchParamsElement = jaxbUnmarshaller.unmarshal(new StreamSource(input), SearchParams.class); 312 } catch (Exception e) { 313 LOG.error("Exception ", e); 314 } 315 return SearchParamsElement.getValue(); 316 } 317 318 public void buildSearchParams(SearchParams searchParams, String docType){ 319 320 if(DocType.BIB.getCode().equalsIgnoreCase(docType)){ 321 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocalId_display")); 322 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_sort")); 323 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Title_display")); 324 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "JournalTitle_display")); 325 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Author_display")); 326 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Publisher_display")); 327 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ISBN_display")); 328 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ISSN_display")); 329 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Subject_display")); 330 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Publisher_display")); 331 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "PublicationDate_display")); 332 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Edition_display")); 333 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Format_display")); 334 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Language_display")); 335 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Description_display")); 336 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "FormGenre_display")); 337 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DocFormat")); 338 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "staffOnlyFlag")); 339 } else if(DocType.HOLDINGS.getCode().equalsIgnoreCase(docType)){ 340 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocalId_display")); 341 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(DocType.BIB.getCode(), "Title_sort")); 342 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumber_display")); 343 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumberPrefix_display")); 344 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ClassificationPart_display")); 345 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingOrder_display")); 346 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingOrderCode_display")); 347 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeCode_display")); 348 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeValue_display")); 349 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Uri_display")); 350 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ReceiptStatus_display")); 351 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CopyNumber_display")); 352 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display")); 353 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DocFormat")); 354 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "bibIdentifier")); 355 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "itemIdentifier")); 356 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "holdingsIdentifier")); 357 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display")); 358 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocationLevelName_display")); 359 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "HoldingsNote_display")); 360 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "staffOnlyFlag")); 361 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "isSeries")); 362 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "isAnalytic")); 363 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "isBoundwith")); 364 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ExtentOfOwnership_Type_display")); 365 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ExtentOfOwnership_Note_Value_display")); 366 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ExtentOfOwnership_Note_Type_display")); 367 } else if(DocType.EHOLDINGS.getCode().equalsIgnoreCase(docType)){ 368 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocalId_display")); 369 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(DocType.BIB.getCode(), "Title_sort")); 370 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "AccessStatus_display")); 371 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Platform_display")); 372 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Imprint_display")); 373 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "StatisticalSearchingFullValue_display")); 374 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "StatisticalSearchingCodeValue_display")); 375 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DocFormat")); 376 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "bibIdentifier")); 377 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "holdingsIdentifier")); 378 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "staffOnlyFlag")); 379 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display")); 380 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocationLevelName_display")); 381 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumber_display")); 382 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumberPrefix_display")); 383 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeCode_display")); 384 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeValue_display")); 385 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Access_Password_display")); 386 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Access_UserName_display")); 387 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "AccessLocation_display")); 388 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Admin_Password_display")); 389 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Admin_url_display")); 390 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Admin_UserName_display")); 391 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Authentication_display")); 392 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CoverageDate_display")); 393 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DonorCode_display")); 394 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DonorPublic_display")); 395 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DonorNote_display")); 396 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "E_Publisher_display")); 397 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "HoldingsNote_display")); 398 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ILL_display")); 399 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemPart_display")); 400 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Link_Text_display")); 401 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "NumberOfSimultaneousUses_display")); 402 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "PerpetualAccess_display")); 403 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Persist_Link_display")); 404 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Proxied_display")); 405 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ReceiptStatus_display")); 406 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Subscription_display")); 407 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Url_display")); 408 } else if(DocType.ITEM.getCode().equalsIgnoreCase(docType)){ 409 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "LocalId_display")); 410 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(DocType.BIB.getCode(), "Title_sort")); 411 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display")); 412 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumber_display")); 413 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CallNumberPrefix_display")); 414 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ClassificationPart_display")); 415 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingOrder_display")); 416 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingOrderCode_display")); 417 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeCode_display")); 418 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ShelvingSchemeValue_display")); 419 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "DocFormat")); 420 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "bibIdentifier")); 421 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "holdingsIdentifier")); 422 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "id")); 423 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemBarcode_display")); 424 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemStatus_display")); 425 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Location_display")); 426 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemUri_display")); 427 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CopyNumber_display")); 428 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "CopyNumberLabel_display")); 429 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "VolumeNumber_display")); 430 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "VolumeNumberLabel_display")); 431 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Enumeration_display")); 432 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "Chronology_display")); 433 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "staffOnlyFlag")); 434 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "isAnalytic")); 435 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemTypeCodeValue_display")); 436 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField(docType, "ItemTypeFullValue_display")); 437 438 } 439 } 440 441}