com.packt.blog.dao.Impl.UserDaoImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.packt.blog.dao.Impl.UserDaoImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.packt.blog.dao.Impl;

import com.packt.blog.dao.IUserDao;
import com.packt.blog.domain.Comment;
import com.packt.blog.domain.Post;
import com.packt.blog.domain.Role;
import com.packt.blog.domain.User;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author Zehafta M
 */
@Transactional
@Repository
public class UserDaoImpl implements IUserDao {

    @Autowired
    private SessionFactory sessionFactory;

    public UserDaoImpl() {

    }

    //    public SessionFactory getSessionFactory() {
    //        return sessionFactory;
    //    }
    //
    //    public void setSessionFactory(SessionFactory sessionFactory) {
    //        this.sessionFactory = sessionFactory;
    //    }
    @Override
    public Collection<User> getAllUsers() {
        return sessionFactory.getCurrentSession().createQuery("from User").list();
    }

    private Session openSession() {
        return sessionFactory.getCurrentSession();
    }

    @Override
    public User getUser(String username) {
        List<User> userList = new ArrayList<User>();
        Query query = openSession().createQuery("from User u where u.username = :username");
        query.setParameter("username", username);
        userList = query.list();
        if (userList.size() > 0) {
            return userList.get(0);
        } else {
            return null;
        }
    }

    @Override

    public void addUser(User user) {

        Role r = new Role();
        r.setName("USER_ROLE");
        List<Role> roles = new ArrayList<>();

        roles.add(r);
        user.setAuthorities(roles);
        //        sessionFactory.getCurrentSession().persist(r);
        sessionFactory.getCurrentSession().persist(user);

    }

    //edit a comment
    @Override
    public void editPost(String username, Post post) {
        User user = getUser(username);
        post.setUser(user);
        openSession().merge(post);
    }

    @Override
    public Collection<Post> getAllPosts() {
        return sessionFactory.getCurrentSession().createQuery("from Post").list();
    }

    @Override
    public void addPost(String username, Post post) {
        User user = getUser(username);
        post.setUser(user);
        user.addPost(post);

        sessionFactory.getCurrentSession().update(user);
    }

    @Override
    public void editPost(Post post) {
        sessionFactory.getCurrentSession().merge(post);
    }

    @Override
    public void deletePost(int id) {
        Query query = openSession().createQuery("delete from Post p where p.id = :id");

        query.setParameter("id", id);
        query.executeUpdate();
    }

    //    @Override
    //    public Post getPostById(int post_id) {
    //       return (Post)sessionFactory.getCurrentSession().ge
    //    }
    @Override
    public List<Post> getAllPostsByUsername(String username) {
        List<Post> postList = new ArrayList<Post>();
        Query query = openSession().createQuery("from Post p where p.user.username = :username");
        query.setParameter("username", username);
        postList = query.list();
        if (postList.size() > 0) {
            return postList;
        } else {
            return null;
        }
    }

    /////////////////////////////////////////////////////////////////
    @Override
    public void editComment(int postId, Comment comment) {
        sessionFactory.getCurrentSession().merge(comment);
    }

    @Override
    public void removeComment(int id) {
        //        Session s = sessionFactory.getCurrentSession();
        //        s.delete(s.load(Comment.class, id));

        Query query = openSession().createQuery("delete from Comment c where c.id = :id");

        query.setParameter("id", id);
        query.executeUpdate();
    }

    @Override
    public Comment getCommentById(int commentId) {
        return (Comment) sessionFactory.getCurrentSession().get(Comment.class, commentId);
    }

    @Override
    public Post getPostById(int postId) {
        return (Post) sessionFactory.getCurrentSession().get(Post.class, postId);
    }

    @Override
    public List<Comment> getCommentByPostId(int postId) {
        List<Comment> commentList = new ArrayList<Comment>();
        Query query = openSession().createQuery("select c from Post p join p.comments c where p.id = :id");
        query.setParameter("id", postId);
        commentList = query.list();
        if (commentList.size() > 0) {
            return commentList;
        } else {
            return null;
        }
    }

    @Override
    public void addComment(int postId, Comment comment) {
        Post post = (Post) sessionFactory.getCurrentSession().get(Post.class, postId);
        System.out.println("Object founds" + post.getTitle() + " " + comment.getId());
        comment.setId(0);
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String username = auth.getName();

        comment.setCommenter(username);
        post.addComment(comment);
        sessionFactory.getCurrentSession().update(post);
        //  sessionFactory.getCurrentSession().persist(comment);
    }

}