package com.ejie.t17i.service;

import java.util.List;

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

/**
 * <p>
 * Interface con la defini&oacute;n de servicios de l&oacute:gica de negocio para acceder a la tabla PORTAL de NORA
 * </p> 
XXXX
 * @see com.ejie.t17i.model.Portal
 */
public interface PortalService {

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

    /**
	 * <p>Busca los elementos Portal que cumplan los criterios pasados como
	 * par&aacute;metros. Consulta la tabla PORTAL aplicando aquellos criterios
	 * pasados en el par&aacute;metro <code>portal</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 portal Portal 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<Portal> findAll(final Portal portal,final JQGridRequestDto jqGridRequestDto);

    /**
	 * <p>Cuenta los elementos Portal que cumplan los criterios pasados como
	 * par&aacute;metros. Consulta la tabla PORTAL aplicando aquellos criterios
	 * pasados en el par&aacute;metro <code>portal</code> que no sean nulos. En el caso de
	 * campos de tipo String deber&aacute;n corresponderse exactamente con los
	 * criterios indicados.</p>
	 * 
	 * @param portal Portal a aplicar en la b&uacute;squeda.
	 * @return El n&uacute;mero de registros encontrado.
	 */
    Long findAllCount(final Portal portal);
	
    /**
	 * <p>Busca los elementos Portal que cumplan los criterios pasados como
	 * par&aacute;metros. Consulta la tabla PORTAL aplicando aquellos criterios
	 * pasados en el par&aacute;metro <code>portal</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 portal Portal 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<Portal> findAllLike(final Portal portal,final JQGridRequestDto jqGridRequestDto,final Boolean startsWith);
	/**
	 * <p>Busca los elementos Portal que cumplan los criterios pasados como
	 * par&aacute;metros. Consulta la tabla PORTAL aplicando aquellos criterios
	 * pasados en el par&aacute;metro <code>portal</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 portal Portal 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<Portal> findAllLikeCP(final Portal portal,final JQGridRequestDto jqGridRequestDto,final Boolean startsWith);

}
