CriteriaValue.java

package com.tradecloud.repository.base.impl;

import java.util.Collection;

/**
 *
 */
public class CriteriaValue {

    // Slight hack. We use a null value to know whether to add the CriteriaValue to the search query, but not all need a value
    private final static Object MARKER = new Object();
    private final CriteriaOperation operation;
    private final String key;
    private final Object value;

    public CriteriaValue(CriteriaOperation operation, String key, Object value) {
        this.operation = operation;
        this.key = key;
        this.value = value;
    }

    public CriteriaOperation getCriteriaOperation() {
        return operation;
    }

    public String getKey() {
        return key;
    }

    public Object getValue() {
        return value;
    }

    /**
     * Match the Hibernate Restrictions class, is case we ever want to swap back.
     *
     * @param key
     * @param values
     * @return
     */
    public static CriteriaValue in(String key, Object values[]) {
        return new CriteriaValue(CriteriaOperation.IN, key, values);
    }

    public static CriteriaValue in(String key, Collection<? extends Object> values) {
        return in(key, values.toArray());
    }

    public static CriteriaValue notIn(String key, Object values[]) {
        return new CriteriaValue(CriteriaOperation.NOT_IN, key, values);
    }

    public static CriteriaValue notIn(String key, Collection<? extends Object> values) {
        return  notIn(key, values.toArray());
    }

    public static CriteriaValue eq(String key, Object value) {
        return new CriteriaValue(CriteriaOperation.EQUALS, key, value);
    }

    public static CriteriaValue eqIgnoreCase(String key, String value) {
        return new CriteriaValue(CriteriaOperation.EQUALS_IGNORE_CASE, key, value);
    }

    public static CriteriaValue like(String key, Object value) {
        return new CriteriaValue(CriteriaOperation.LIKE, key, value);
    }

    public static CriteriaValue likeAny(String key, Object value) {
        return new CriteriaValue(CriteriaOperation.LIKE_ANY, key, value);
    }

    public static CriteriaValue gt(String key, Object value) {
        return new CriteriaValue(CriteriaOperation.GREATER_THAN, key, value);
    }

    public static CriteriaValue lt(String key, Object value) {
        return new CriteriaValue(CriteriaOperation.LESS_THAN, key, value);
    }

    public static CriteriaValue isNull(String key) {
        return new CriteriaValue(CriteriaOperation.NULL, key, MARKER);
    }

    public static CriteriaValue isNotNull(String key) {
        return new CriteriaValue(CriteriaOperation.NOT_NULL, key, MARKER);
    }

    public static CriteriaValue between(String key, Object values[]) {
        return new CriteriaValue(CriteriaOperation.IN, key, values);
    }

    public static CriteriaValue notInKey(String key, Object values[]) {
        return new CriteriaValue(CriteriaOperation.NOT_IN_KEY, key, values);
    }

    public static CriteriaValue paramsOnly(String key, Object value) {
        return new CriteriaValue(CriteriaOperation.PARAMS_ONLY, key, value);
    }
}