package com.ejie.m62fb.service.registroVPP;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.m62fb.dao.registroVPP.ViviendaDisponibleDao;
import com.ejie.m62fb.model.ViviendaDisponible;
import com.ejie.x38.dto.JQGridRequestDto;
import com.ejie.x38.dto.JQGridResponseDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * ViviendaDisponiblesServiceImpl generated by UDA, 02-dic-2015 8:59:58.
 * 
XXXX
 */

@Service(value = "viviendaDisponiblesService")
public class ViviendaDisponibleServiceImpl implements ViviendaDisponibleService {

	@Autowired
	private ViviendaDisponibleDao viviendaDisponibleDao;

	/**
	 * Inserts a single row in the ViviendaDisponible table.
	 * 
	 * @param viviendaDisponible
	 *            ViviendaDisponible
	 * @return ViviendaDisponible
	 */
	@Override
	@Transactional(rollbackFor = Throwable.class)
@PreAuthorize("hasPermission('VIVIENDA_DISPONIBLE_SERVICE','SecureService','create')")
	public ViviendaDisponible add(ViviendaDisponible viviendaDisponible) {
		return this.viviendaDisponibleDao.add(viviendaDisponible);
	}

	/**
	 * Updates a single row in the ViviendaDisponible table.
	 * 
	 * @param viviendaDisponible
	 *            ViviendaDisponible
	 * @return ViviendaDisponible
	 */
	@Override
	@Transactional(rollbackFor = Throwable.class)
@PreAuthorize("hasPermission('VIVIENDA_DISPONIBLE_SERVICE','SecureService','write')")
	public ViviendaDisponible update(ViviendaDisponible viviendaDisponible) {
		return this.viviendaDisponibleDao.update(viviendaDisponible);
	}

	/**
	 * Finds a single row in the ViviendaDisponible table.
	 * 
	 * @param viviendaDisponible
	 *            ViviendaDisponible
	 * @return ViviendaDisponible
	 */
	@Override
@PreAuthorize("hasPermission('VIVIENDA_DISPONIBLE_SERVICE','SecureService','read')")
	public ViviendaDisponible find(ViviendaDisponible viviendaDisponible) {
		return this.viviendaDisponibleDao.find(viviendaDisponible);
	}

	/**
	 * Deletes a single row in the ViviendaDisponible table.
	 * 
	 * @param viviendaDisponible
	 *            ViviendaDisponible
	 */
	@Override
	@Transactional(rollbackFor = Throwable.class)
@PreAuthorize("hasPermission('VIVIENDA_DISPONIBLE_SERVICE','SecureService','delete')")
	public void remove(ViviendaDisponible viviendaDisponible) {
		this.viviendaDisponibleDao.remove(viviendaDisponible);
	}

	/**
	 * Finds a list of rows in the ViviendaDisponible table.
	 * 
	 * @param viviendaDisponible
	 *            ViviendaDisponible
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List<ViviendaDisponible>
	 */
	@Override
@PreAuthorize("hasPermission('VIVIENDA_DISPONIBLE_SERVICE','SecureService','read')")
	public List<ViviendaDisponible> findAll(
			ViviendaDisponible viviendaDisponible,
			JQGridRequestDto jqGridRequestDto) {
		return this.viviendaDisponibleDao.findAll(viviendaDisponible,
				jqGridRequestDto);
	}

	/**
	 * Finds rows in the ViviendaDisponible table using like.
	 * 
	 * @param viviendaDisponible
	 *            ViviendaDisponible
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<ViviendaDisponible>
	 */
	@Override
@PreAuthorize("hasPermission('VIVIENDA_DISPONIBLE_SERVICE','SecureService','read')")
	public List<ViviendaDisponible> findAllLike(
			ViviendaDisponible viviendaDisponible,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith) {
		return this.viviendaDisponibleDao.findAllLike(viviendaDisponible,
				jqGridRequestDto, startsWith);
	}

	/*
	 * OPERACIONES RUP_TABLE
	 */
	/**
	 * Filter method in the ViviendaDisponible table.
	 * 
	 * @param filterViviendaDisponible
	 *            ViviendaDisponible
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return JQGridResponseDto<ViviendaDisponible>
	 */
	@Override
@PreAuthorize("hasPermission('VIVIENDA_DISPONIBLE_SERVICE','SecureService','read')")
	public JQGridResponseDto<ViviendaDisponible> filter(
			ViviendaDisponible filterViviendaDisponible,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith) {
		List<ViviendaDisponible> listaViviendaDisponibles = this.viviendaDisponibleDao
				.findAllLike(filterViviendaDisponible, jqGridRequestDto, false);
		Long recordNum = this.viviendaDisponibleDao.findAllLikeCount(
				filterViviendaDisponible != null ? filterViviendaDisponible
						: new ViviendaDisponible(), false);
		if (jqGridRequestDto.getMultiselection().getSelectedIds() != null) {
			List<TableRowDto<ViviendaDisponible>> reorderSelection = this.viviendaDisponibleDao
					.reorderSelection(filterViviendaDisponible,
							jqGridRequestDto, startsWith);
			return new JQGridResponseDto<ViviendaDisponible>(jqGridRequestDto,
					recordNum, listaViviendaDisponibles, reorderSelection);
		}
		return new JQGridResponseDto<ViviendaDisponible>(jqGridRequestDto,
				recordNum, listaViviendaDisponibles);
	}

	/**
	 * Reorder the selection made in ViviendaDisponible table.
	 * 
	 * @param filterViviendaDisponible
	 *            ViviendaDisponible
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return Object
	 */
	@Override
@PreAuthorize("hasPermission('VIVIENDA_DISPONIBLE_SERVICE','SecureService','read')")
	public Object reorderSelection(ViviendaDisponible filterViviendaDisponible,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith) {
		return this.viviendaDisponibleDao.reorderSelection(
				filterViviendaDisponible, jqGridRequestDto, startsWith);
	}
}
