package com.ejie.t17i.dao;

import java.util.List;

import com.ejie.t17i.model.Pais;
import com.ejie.x38.dto.JQGridRequestDto;

/**
 * <p>
 * Interface con la defini&oacute;n de servicios DAO para acceder a la tabla PAIS de NORA
 * </p>
 
XXXX
 * @see com.ejie.t17i.model.Pais
 */
public interface PaisDao {

	/**
	 * <p>Busca un Pais en la tabla PAIS por su clave primaria (id).</p>
	 * 
	 * @param pais Un Pais con el valor a buscar
	 * @return Pais El Pais encontrado. En caso de no encontrar ning&uacute;n elemento ser&aacute; <code>null</code>.
	 */
	Pais find(final Pais pais);

	/**
	 * <p>Busca los elementos Pais que cumplan los criterios pasados como
	 * par&aacute;metros. Consulta la tabla PAIS aplicando aquellos criterios
	 * pasados en el par&aacute;metro <code>pais</code> que no sean nulos. En el caso de
	 * campos de tipo String deber&aacute;n corresponderse exactamente con los
	 * criterios indicados.</p>
	 * <p>Se devolver&aacute;n los registros encontrados correspondientes la
	 * p&aacute;gina indicada en los par&aacute;metros de paginaci&oacute;n. En caso de que
	 * los registros totales sean insuficientes para que la p&aacute;gina indicada
	 * contenga elementos se devolver&aacute; una lista vac&iacute;a.</p>
	 * 
	 * @param pais Pais a aplicar en la b&uacute;squeda.
	 * @param pagination Par&aacute;metros de paginaci&oacute;n.
	 * @return List Un lista con los registros encontrados.
	 */
	List<Pais> findAll(final Pais pais,final JQGridRequestDto jqGridRequestDto);

	/**
	 * <p>Cuenta los elementos Pais que cumplan los criterios pasados como
	 * par&aacute;metros. Consulta la tabla PAIS aplicando aquellos criterios
	 * pasados en el par&aacute;metro <code>pais</code> que no sean nulos. En el caso de
	 * campos de tipo String deber&aacute;n corresponderse exactamente con los
	 * criterios indicados.</p>
	 * 
	 * @param pais Pais a aplicar en la b&uacute;squeda.
	 * @return El n&uacute;mero de registros encontrado.
	 */
	Long findAllCount(final Pais pais);

	/**
	 * <p>Busca los elementos Pais que cumplan los criterios pasados como
	 * par&aacute;metros. Consulta la tabla PAIS aplicando aquellos criterios
	 * pasados en el par&aacute;metro <code>pais</code> que no sean nulos. En el caso de
	 * criterios de tipo String se aplicara la clausula <code>LIKE</code> de SQL de
	 * forma que no sea necesario que el texto coincida completamente, pudiendo
	 * buscarse registros cuyos campos empiezen (startsWith a <code>true</code>) o
	 * contengan (startsWith a <code>false</code>) los criterios indicados.</p>
	 * <p>Se devolver&aacute;n los registros encontrados correspondientes la
	 * p&aacute;gina indicada en los par&aacute;metros de paginaci&oacute;n. En caso de que
	 * los registros totales sean insuficientes para que la p&aacute;gina indicada
	 * contenga elementos se devolver&aacute; una lista vacia.</p>
	 * 
	 * @param pais Pais a aplicar en la b&uacute;squeda.
	 * @param pagination Par&aacute;metros de paginaci&oacute;n.
	 * @param startsWith Si en los campos de texto se buscaran registros que empiezen
	 * (<code>true</code>) o contengan (<code>false</code>) el criterio.
	 * @return List Un lista con los registros encontrados.
	 */
	List<Pais> findAllLike(final Pais pais,final JQGridRequestDto jqGridRequestDto,final Boolean startsWith);
}
