br.com.tcc.service.persistence.CriteriaHelper.java Source code

Java tutorial

Introduction

Here is the source code for br.com.tcc.service.persistence.CriteriaHelper.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tcc.service.persistence;

import br.com.tcc.common.support.IEntity;
import java.io.Serializable;

import org.hibernate.Criteria;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;

/**
 * Helper para implementao das chamadas ao Criteria API do Hibernate
 * que no so feitas diretamente por customizaes.
 * @author Y5DJ
 */
public final class CriteriaHelper {

    /**
     * Construtor privado, como helper deve ser utilizado somente atravs
     * de seus mtodos estticos.
     */
    private CriteriaHelper() {
    }

    /**
     * Adiciona na {@link Criteria} vrios critrios de ordenao.
     * Sempre ser adicionado uma ordenao pelo id da Entity
     * como ltimo critrio de ordenao das entidades.
     *
     * @param criteria
     *          a instncia de {@link Criteria} na qual se
     *          adicionaro critrios de ordenao.
     * @param orderByList
     *          a lista de critrios de ordenao a adicionar.
     */
    public static void addOrderCriteria(final Criteria criteria, final OrderBy... orderByList) {
        if (orderByList != null) {
            for (OrderBy orderBy : orderByList) {
                criteria.addOrder(CriteriaHelper.convertOrderByToOrder(orderBy));
            }
        }
        //sempre adiciona o id como ultima ordenacao
        //default do orderBy vazio  id
        criteria.addOrder(convertOrderByToOrder(new OrderBy()));
    }

    /**
     * Cria uma instancia de {@link Order} do Hibernate
     * baseado em um {@link OrderBy} do CelulaTronco.
     * @param orderBy instancia de {@link OrderBy}
     * @return instancia de {@link Order}
     */
    public static Order convertOrderByToOrder(final OrderBy orderBy) {
        Order order = null;
        if (orderBy.isAscending()) {
            order = Order.asc(orderBy.getName());
        } else {
            order = Order.desc(orderBy.getName());
        }
        if (!orderBy.isCaseSensitive()) {
            order = order.ignoreCase();
        }
        return order;
    }

    /**
     * Cria um exemplo da etidade para buscas. O padro de buscas por exemplo do framework Celula Tronco Java segue os seguintes termos:
     * <ol>
     * <li> Case  igonorado para propriedades String</li>
     * <li>O operador "like"  habilitado para todos os atributos String, buscando o termo em qualquer parte da String.</li>
     * <li>PropertySelector ser {@link NotNullOrBlankProperySelector}.</li>
     * </ol>
     * @param <T> Tipo de Entidade
     * @param entity entidade
     * @return exemplo de T
     */
    public static <T extends IEntity<? extends Serializable>> Example createExample(final T entity) {
        final Example example = Example.create(entity);
        example.ignoreCase();
        example.enableLike(MatchMode.ANYWHERE);
        example.setPropertySelector(NotNullOrBlankProperySelector.getInstance());
        return example;
    }
}