package com.atrium.hibernate.modelo;

import java.util.List;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.atrium.hibernate.Tareas;
import com.atrium.hibernate.Usuarios;
import com.atrium.hibernate.dao.ext.Usuario_DAOEXT;

@Component(value = "gestion_usuario")
@Scope(value = "prototype")
public class Gestion_Usuario implements IGestion_Usuario {

	private Usuario_DAOEXT usuario_dao;

	
	@Override
	@Transactional(readOnly = true)
	public Usuarios consultar_PorNombre(String nombre_usuario) {
		return usuario_dao.findById(nombre_usuario);
	}

	@Override
	@Transactional(readOnly = true)
	public List<Tareas> consultar_TareasUsuario(Usuarios usuario) {
		return usuario_dao.consultar_TareasUsuario(usuario);
	}

	
	@Override
	@Transactional(readOnly = true)
	public List<Usuarios> consultar_Todos() {
		return usuario_dao.findAll();
	}

	/* (non-Javadoc)
	 * @see com.atrium.hibernate.modelo.IGestion_Usuario#consultar_ConRol(java.lang.String)
	 */
	@Override
	@Transactional(readOnly = true)
	public Usuarios consultar_ConRol(String nombre_usuario) {
		return usuario_dao.consultar_UsuarioConRol(nombre_usuario);
	}

	// ***** CRUD DE LA ENTIDAD

	/* (non-Javadoc)
	 * @see com.atrium.hibernate.modelo.IGestion_Usuario#alta_Usuario(com.atrium.hibernate.Usuarios)
	 */
	@Override
	@Transactional(readOnly = false)
	public void alta_Usuario(Usuarios usuario_nuevo) {
		usuario_dao.save(usuario_nuevo);
	}

	/* (non-Javadoc)
	 * @see com.atrium.hibernate.modelo.IGestion_Usuario#baja_Usuario(com.atrium.hibernate.Usuarios)
	 */
	@Override
	@Transactional
	public void baja_Usuario(Usuarios usuario_aeliminar) {
		usuario_dao.delete(usuario_aeliminar);
	}

	/* (non-Javadoc)
	 * @see com.atrium.hibernate.modelo.IGestion_Usuario#modificacion_Usuario(com.atrium.hibernate.Usuarios)
	 */
	@Override
	@Transactional
	public void modificacion_Usuario(Usuarios usuario_amodificar) {
		usuario_dao.attachDirty(usuario_amodificar);
	}

	// ACCESORES PARA SPRING
	public void setUsuario_dao(Usuario_DAOEXT usuario_dao) {
		this.usuario_dao = usuario_dao;
	}

}

