package gemini.jsf.dao;

import gemini.jsf.entity.User;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Author: Georgy Gobozov
 * Date: 09.04.13
 */
@Transactional
public class UserDaoImpl implements UserDao {

    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public void create(User user) {
        sessionFactory.getCurrentSession().save(user);
    }

    public void update(User user) {
        sessionFactory.getCurrentSession().saveOrUpdate(user);
    }

    public User getById(Long userId) {
        return (User) sessionFactory.getCurrentSession().get(User.class, userId);
    }

    public List<User> getAll() {
        return sessionFactory.getCurrentSession().createQuery("FROM User order by login").list();
    }

    public User getByLogin(String login) {
        final Query query = sessionFactory.getCurrentSession().createQuery("from User u where u.login = ?");
        query.setParameter(1, login);
        return (User)query.uniqueResult();
    }

    public void delete(User user) {
        sessionFactory.getCurrentSession().delete(user);
    }

}