/**
  * This method gets the applicable providers that meet the search criteria. If none available, the
  * search result will be empty.
  *
  * @param criteria the search criteria
  * @return the search result with the matched providers
  * @throws IllegalArgumentException if the criteria is null
  * @throws IllegalArgumentException if criteria.pageNumber < 0
  * @throws IllegalArgumentException - if criteria.pageSize < 1 unless criteria.pageNumber <= 0
  * @throws ServiceException for any other exceptions encountered
  */
 @TransactionAttribute(TransactionAttributeType.REQUIRED)
 public SearchResult<ProviderProfile> search(HospiceSearchCriteria criteria)
     throws ServiceException {
   String signature = CLASS_NAME + "#search(HospiceSearchCriteria criteria)";
   LogUtil.traceEntry(getLog(), signature, new String[] {"criteria"}, new Object[] {criteria});
   try {
     SearchResult<ProviderProfile> results = hospiceLicensingDAO.search(criteria);
     return LogUtil.traceExit(getLog(), signature, results);
   } catch (IllegalArgumentException e) {
     LogUtil.traceError(getLog(), signature, e);
     throw e;
   } catch (ServiceException e) {
     LogUtil.traceError(getLog(), signature, e);
     throw e;
   }
 }