Example usage for org.springframework.data.mongodb.core.query Criteria getKey

List of usage examples for org.springframework.data.mongodb.core.query Criteria getKey

Introduction

In this page you can find the example usage for org.springframework.data.mongodb.core.query Criteria getKey.

Prototype

@Override
    @Nullable
    public String getKey() 

Source Link

Usage

From source file:org.opentestsystem.shared.search.domain.AbstractSearchRequest.java

protected Map<String, Criteria> buildCriteria() {

    final Map<String, Criteria> criteriaMap = new HashMap<>();

    for (final String searchKey : searchCriteria.keySet()) {
        final SearchFilter filter = searchFilterMap.get(searchKey);
        final String[] searchValues = searchCriteria.get(searchKey);
        if (hasAValue(searchValues)) {

            final Object[] queryValues = filter.getSearchValue(searchValues);
            final String domainName = filter.getDomainName();
            Criteria criteria = criteriaMap.get(filter.getDomainName());

            if (criteria == null) {
                criteria = Criteria.where(domainName);
            }/*from w  ww.ja  v  a2 s . c  o  m*/

            switch (filter.getOperator()) {
            case EQ:
                if (queryValues.length == ONE) {
                    criteria = criteria.is(queryValues[0]);
                } else {
                    criteria = criteria.in(queryValues);
                }
                break;
            case GTH:
                criteria = criteria.gt(queryValues[0]);
                break;
            case LTH:
                criteria = criteria.lt(queryValues[0]);
                break;
            case GEQ:
                criteria = criteria.gte(queryValues[0]);
                break;
            case LEQ:
                criteria = criteria.lte(queryValues[0]);
                break;
            case NOTNULL:
                criteria = criteria.ne(null);
                break;
            case CASE_INSENSITIVE:
                if (queryValues.length == ONE) {
                    criteria = buildCaseInsensitiveRegex(criteria, queryValues[0]);
                } else {
                    final Criteria[] critList = new Criteria[queryValues.length];
                    for (int i = 0; i < queryValues.length; i++) {
                        critList[i] = buildCaseInsensitiveRegex(Criteria.where(domainName), queryValues[i]);
                    }
                    criteria = new Criteria().orOperator(critList);
                }
                break;
            case WLD_REG:
                if (queryValues.length == ONE) {
                    criteria = buildRegex(criteria, queryValues[0]);
                } else {
                    final Criteria[] critList = new Criteria[queryValues.length];
                    for (int i = 0; i < queryValues.length; i++) {
                        critList[i] = buildRegex(Criteria.where(domainName), queryValues[i]);
                    }
                    criteria = new Criteria().orOperator(critList);
                }
                break;
            case DYNAMIC_ELEMENT_NAME:
                // modifying domain name, recreate the where
                criteria = Criteria.where(
                        domainName + (searchValues[0] == null ? "" : replaceEscapeChars(searchValues[0])));
                if (searchValues.length == ONE) {
                    // if only the first searchValue is specified (the element name)
                    // match any element (with the searchValue name that has a value
                    criteria = buildRegex(criteria, ".");
                } else if (searchValues.length == TWO) {
                    criteria = criteria.is(searchValues[1]);
                } else {
                    criteria = criteria.in((Object[]) Arrays.copyOfRange(searchValues, 1, searchValues.length));
                }
                break;
            default:
                break;
            }
            criteriaMap.put(domainName, criteria);
        }
    }
    final Map<String, Criteria> returnMap = new HashMap<String, Criteria>();
    for (final Criteria crit : criteriaMap.values()) {
        returnMap.put(crit.getKey(), crit);
    }
    return returnMap;
}