/** * Return a hash code value for the given search. */ public static int hashCode(ISearch search) { int hash = 1; hash = hash * 31 + (search.getSearchClass() == null ? 0 : search.getSearchClass().hashCode()); hash = hash * 31 + (search.getFields() == null ? 0 : search.getFields().hashCode()); hash = hash * 31 + (search.getFilters() == null ? 0 : search.getFilters().hashCode()); hash = hash * 31 + (search.getSorts() == null ? 0 : search.getSorts().hashCode()); hash = hash * 31 + (search.isDisjunction() ? 1 : 0); hash = hash * 31 + (new Integer(search.getResultMode()).hashCode()); hash = hash * 31 + (new Integer(search.getFirstResult()).hashCode()); hash = hash * 31 + (new Integer(search.getPage()).hashCode()); hash = hash * 31 + (new Integer(search.getMaxResults()).hashCode()); return hash; }
/** * Copy the contents of the source search object to the destination search * object, overriding any contents previously found in the destination. All * collections are copied into new collections, but the items in those * collections are not duplicated; they still point to the same objects. */ public static <T extends IMutableSearch> T copy(ISearch source, T destination) { shallowCopy(source, destination); ArrayList<String> fetches = new ArrayList<String>(); fetches.addAll(source.getFetches()); destination.setFetches(fetches); ArrayList<Field> fields = new ArrayList<Field>(); fields.addAll(source.getFields()); destination.setFields(fields); ArrayList<Filter> filters = new ArrayList<Filter>(); filters.addAll(source.getFilters()); destination.setFilters(filters); ArrayList<Sort> sorts = new ArrayList<Sort>(); sorts.addAll(source.getSorts()); destination.setSorts(sorts); return destination; }
/** * Calculate the first result to use given the <code>firstResult</code>, * <code>page</code> and <code>maxResults</code> values of the search * object. * * <p> * The calculation is as follows: * <ul> * <li>If <code>firstResult</code> is defined (i.e. > 0), use it. * <li>Otherwise if <code>page</code> and <code>maxResults</code> are * defined (i.e. > 0), use <code>page * maxResults</code>. * <li>Otherwise, just use 0. * </ul> */ public static int calcFirstResult(ISearch search) { return (search.getFirstResult() > 0) ? search.getFirstResult() : (search.getPage() > 0 && search .getMaxResults() > 0) ? search.getPage() * search.getMaxResults() : 0; }
private void addPaging(final Criteria criteria, final ISearch search) { final int firstResult = search.getFirstResult(); if (firstResult >= ZERO) { criteria.setFirstResult(firstResult); } final int maxResult = search.getMaxResults(); if (maxResult > ZERO) { criteria.setMaxResults(maxResult); } }
/** * Search for objects based on the search parameters in the specified * <code>ISearch</code> object. * * @see ISearch */ @SuppressWarnings("unchecked") public List search(Session session, ISearch search) { if (search == null) return null; return search(session, search.getSearchClass(), search); }
/** * Generate the QL string for a given search. Fill paramList with the values * to be used for the query. All parameters within the query string are * specified as named parameters ":pX", where X is the index of the * parameter value in paramList. */ public String generateQL(Class<?> entityClass, ISearch search, List<Object> paramList) { if (entityClass == null) throw new NullPointerException("The entity class for a search cannot be null"); SearchContext ctx = new SearchContext(entityClass, rootAlias, paramList); List<Field> fields = checkAndCleanFields(search.getFields()); applyFetches(ctx, checkAndCleanFetches(search.getFetches()), fields); String select = generateSelectClause(ctx, fields, search.isDistinct()); String where = generateWhereClause(ctx, checkAndCleanFilters(search.getFilters()), search.isDisjunction()); String orderBy = generateOrderByClause(ctx, checkAndCleanSorts(search.getSorts())); String from = generateFromClause(ctx, true); StringBuilder sb = new StringBuilder(); sb.append(select); sb.append(from); sb.append(where); sb.append(orderBy); String query = sb.toString(); if (logger.isDebugEnabled()) logger.debug("generateQL:\n " + query); return query; }
String where = generateWhereClause(ctx, checkAndCleanFilters(search.getFilters()), search.isDisjunction()); String from = generateFromClause(ctx, false); List<Field> fields = search.getFields(); if (fields != null) { for (Field field : fields) { if (!search.isDistinct()) { sb.append("select count(").append(rootAlias).append(")"); } else if (fields.size() == 0) {
private void addFilter(final Criteria criteria, final ISearch search) { final List<Filter> filters = search.getFilters(); final FilterToCriteria helper = new FilterToCriteria(filters); final List<Criterion> criterions = helper.getCriterions(); if (search.isDisjunction()) { final Disjunction disjunction = Restrictions.disjunction(); addCriterions(disjunction, criterions); criteria.add(disjunction); } else { addCriterions(criteria, criterions); } }
@Override public List<R> search(ISearch search) { List<R> objects = new ArrayList<>(); if (search.getFilters().isEmpty()) { // no filter return findAll(); } for (Filter filter : search.getFilters()) { if (filter != null) { List<R> filteredObjects = search(filter); objects.addAll(filteredObjects); } } return objects; }
private void addPaging(Query query, ISearch search) { int firstResult = SearchUtil.calcFirstResult(search); if (firstResult > 0) { query.setFirstResult(firstResult); } if (search.getMaxResults() > 0) { query.setMaxResults(search.getMaxResults()); } }
return results; int resultMode = search.getResultMode(); if (resultMode == ISearch.RESULT_AUTO) { int count = 0; Iterator<Field> fieldItr = search.getFields().iterator(); while (fieldItr.hasNext()) { Field field = fieldItr.next(); case ISearch.RESULT_MAP: List<String> keyList = new ArrayList<String>(); Iterator<Field> fieldItr = search.getFields().iterator(); while (fieldItr.hasNext()) { Field field = fieldItr.next();
private void addSort(final Criteria criteria, final ISearch search) { final List<Sort> sorts = search.getSorts(); for (final Sort sort : sorts) { criteria.addOrder(getOrder(sort)); } }
/** * Search for objects based on the search parameters in the specified * <code>ISearch</code> object. * * @see ISearch */ @SuppressWarnings("unchecked") public List search(EntityManager entityManager, ISearch search) { if (search == null) return null; return search(entityManager, search.getSearchClass(), search); }
@Override public List<R> search(ISearch search) { List<R> objects = new ArrayList<>(); if (search.getFilters().isEmpty()) { // no filter return findAll(); } for (Filter filter : search.getFilters()) { if (filter != null) { List<R> filteredObjects = search(filter); objects.addAll(filteredObjects); } } return objects; }
private void addPaging(Query query, ISearch search) { int firstResult = SearchUtil.calcFirstResult(search); if (firstResult > 0) { query.setFirstResult(firstResult); } if (search.getMaxResults() > 0) { query.setMaxResults(search.getMaxResults()); } }
private void addResultMode(Query query, ISearch search) { int resultMode = search.getResultMode(); if (resultMode == ISearch.RESULT_AUTO) { int count = 0; Iterator<Field> fieldItr = search.getFields().iterator(); while (fieldItr.hasNext()) { Field field = fieldItr.next(); case ISearch.RESULT_MAP: List<String> keyList = new ArrayList<String>(); Iterator<Field> fieldItr = search.getFields().iterator(); while (fieldItr.hasNext()) { Field field = fieldItr.next();
/** * Return true if the search objects have equivalent contents. */ public static boolean equals(ISearch search, Object obj) { if (search == obj) return true; if (!(obj instanceof ISearch)) return false; ISearch s = (ISearch) obj; if (search.getSearchClass() == null ? s.getSearchClass() != null : !search.getSearchClass().equals( s.getSearchClass())) return false; if (search.isDisjunction() != s.isDisjunction() || search.getResultMode() != s.getResultMode() || search.getFirstResult() != s.getFirstResult() || search.getPage() != s.getPage() || search.getMaxResults() != s.getMaxResults()) return false; if (search.getFetches() == null ? s.getFetches() != null : !search.getFetches().equals(s.getFetches())) return false; if (search.getFields() == null ? s.getFields() != null : !search.getFields().equals(s.getFields())) return false; if (search.getFilters() == null ? s.getFilters() != null : !search.getFilters().equals(s.getFilters())) return false; if (search.getSorts() == null ? s.getSorts() != null : !search.getSorts().equals(s.getSorts())) return false; return true; }
/** * Returns the total number of results that would be returned using the * given <code>ISearch</code> if there were no paging or maxResult limits. * * @see ISearch */ public int count(Session session, ISearch search) { if (search == null) return 0; return count(session, search.getSearchClass(), search); }
/** * Returns a <code>SearchResult</code> object that includes the list of * results like <code>search()</code> and the total length like * <code>searchLength</code>. Uses the specified searchClass, ignoring the * searchClass specified on the search itself. * * @see ISearch */ @SuppressWarnings("unchecked") public SearchResult searchAndCount(EntityManager entityManager, Class<?> searchClass, ISearch search) { if (searchClass == null || search == null) return null; SearchResult result = new SearchResult(); result.setResult(search(entityManager, searchClass, search)); if (search.getMaxResults() > 0) { result.setTotalCount(count(entityManager, searchClass, search)); } else { result.setTotalCount(result.getResult().size() + SearchUtil.calcFirstResult(search)); } return result; }
/** * Copy the contents of the source search object to the destination search * object, overriding any contents previously found in the destination. All * destination properties reference the same objects from the source * properties. */ public static IMutableSearch shallowCopy(ISearch source, IMutableSearch destination) { destination.setSearchClass(source.getSearchClass()); destination.setDistinct(source.isDistinct()); destination.setDisjunction(source.isDisjunction()); destination.setResultMode(source.getResultMode()); destination.setFirstResult(source.getFirstResult()); destination.setPage(source.getPage()); destination.setMaxResults(source.getMaxResults()); destination.setFetches(source.getFetches()); destination.setFields(source.getFields()); destination.setFilters(source.getFilters()); destination.setSorts(source.getSorts()); return destination; }