package com.ejie.t17i.dao;

import java.util.List;

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

/**
 * <p>
 * Interface con la defini&oacute;n de servicios DAO para acceder a la tabla PLANTA de NORA
 * </p> 
XXXX
 * @see com.ejie.t17i.model.Planta
 */

public interface PlantaDao {

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

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

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