package com.ejie.m62fb.dao.registroVPP;

import java.math.BigDecimal;
import java.util.List;

import com.ejie.m62fb.model.Elemento;
import com.ejie.m62fb.model.Vivienda;
import com.ejie.m62fb.model.ViviendaActMasiva;
import com.ejie.x38.dto.JQGridRequestDto;

/**
 * ViviendaDao.
 * 
XXXX
 */
public interface ViviendaDao {

	/**
	 * Inserts a single row in the Vivienda table.
	 * 
	 * @param vivienda
	 *            Vivienda
	 * @return Vivienda
	 */
	Vivienda add(Vivienda vivienda);
//	void updateDesCalle(BigDecimal numVivienda,String desCalle);
	/**
	 * Updates a single row in the Vivienda table.
	 * 
	 * @param vivienda
	 *            Vivienda
	 * @return Vivienda
	 */
	Vivienda update(Vivienda vivienda);

	/**
	 * Finds a single row in the Vivienda table.
	 * 
	 * @param vivienda
	 *            Vivienda
	 * @return Vivienda
	 */
	Vivienda find(Vivienda vivienda);
	/**
	 * Finds a single row in the Vivienda table.
	 * 
	 * @param rowId
	 * @return Vivienda
	 */
	Vivienda findByRowid(String rowId);
	/**
	 * Removes a single row in the Vivienda table.
	 * 
	 * @param vivienda
	 *            Vivienda
	 */
	void remove(Vivienda vivienda);

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Funcion encargada de buscar las viviendas para el mantenimiento de
	 * seleccion de viviendas
	 * 
	 * @param vivienda
	 *            Vivienda
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Booleanl
	 * @return List<Vivienda>
	 */
	List<Vivienda> filterSeleccionViviendas(Vivienda vivienda,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith);
	
	/**
	 * Funcion encargada de buscar las viviendas para el mantenimiento de
	 * seleccion de viviendas para su actualización masiva
	 * 
	 * @param vivienda
	 *            Vivienda
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Booleanl
	 * @return List<ViviendaActMasiva>
	 */
	List<ViviendaActMasiva> filterSeleccionViviendasForActMasiva(Vivienda vivienda,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith);

	/**
	 * Funcion encargada de contar las viviendas para el mantenimiento de
	 * seleccion de viviendas
	 * 
	 * @param vivienda
	 *            Vivienda
	 * @param startsWith
	 *            Boolean
	 * @return Long
	 */
	Long filterSeleccionViviendasCount(Vivienda vivienda, Boolean startsWith);

	/**
	 * Comprueba si se ha realizado algun cambio en BBDD, si es asi lanza una
	 * excecion.
	 * 
	 * @param vivienda
	 *            Vivienda(numVivienda, fecHorUltimaModif)
	 */
	void checkForUpdate(Vivienda vivienda);
	
    /**
     * Finds a List of rows in the Vivienda table.
     *
     * @param vivienda Vivienda
     * @param jqGridRequestDto JQGridRequestDto
     * @return List
     */
    List<Vivienda> findAll(Vivienda vivienda, JQGridRequestDto jqGridRequestDto);
    
    List<Vivienda> findAllLike(Vivienda vivienda, JQGridRequestDto jqGridRequestDto, Boolean startsWith);
    
	/**
	 * Finds a single row in the Vivienda table.
	 * 
	 * @param vivienda
	 *            Vivienda
	 * @return Vivienda
	 */
	Vivienda findForLupa(Vivienda vivienda);    
}