DAO.StatutsDAOImpl.java Source code

Java tutorial

Introduction

Here is the source code for DAO.StatutsDAOImpl.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 DAO;

import Enumerations.TypeActions;
import java.util.List;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author tbenoist
 */
@Repository
public class StatutsDAOImpl implements StatutsDAO {

    // Communication avec la 
    @PersistenceContext(unitName = "Yaourt_PU")
    private EntityManager em;

    @Resource
    private IMCDAO imcDAO;

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    // Ecriture ====================================================================
    @Transactional
    @Override
    public int save(StatutsEntity s) {
        s = em.merge(s);
        em.persist(s);
        return s.getId();
    }

    @Transactional
    @Override
    public void update(StatutsEntity s) {
        em.merge(s);
    }

    @Transactional
    @Override
    public void delete(StatutsEntity s) {
        s = em.merge(s);
        em.remove(s);
    }

    /**
     * Ajout d'un lger au statut
     *
     * @param s Statut auquel le lger est ajout
     * @param p Personne ajoutant le lger
     */
    @Transactional
    @Override
    public void addLeger(StatutsEntity s, PersonnesEntity p) {
        // Ajout du lger au statut
        s.addLeger();
        // Cration d'une action entre la personne et le statut
        PersonnesStatutsEntity ps = new PersonnesStatutsEntity(p, s, 1, false, false);
        if (!s.getAuteur().equals(p)) {
            imcDAO.removeIMC(s.getAuteur(), p);
        }
        // Si non existence d'une action, on sauvegarde, sinon on met juste  
        // jour
        if (s.addPersonnesStatuts(ps) && p.addPersonnesStatuts(ps)) {
            em.persist(ps);
        } else {
            setAction(p, s, TypeActions.leger);
        }

        // Update de la BD
        em.merge(p);
        em.merge(s);
    }

    /**
     * Suppression d'un lger au statut
     *
     * @param s Statut duquel le lger est supprim
     * @param p Personne supprimant le lger Suppression de l'action par
     * l'utilisateur  dfinir ?
     */
    @Transactional
    @Override
    public void removeLeger(StatutsEntity s, PersonnesEntity p) {
        s.delLeger();
        if (!s.getAuteur().equals(p)) {
            imcDAO.addIMC(s.getAuteur(), p);
        }
        em.merge(s);
    }

    /**
     * Ajout d'un lourd au statut
     *
     * @param s Statut auquel le lourd est ajout
     * @param p Personne ajoutant le lourd
     */
    @Transactional
    @Override
    public void addLourd(StatutsEntity s, PersonnesEntity p) {
        // Ajout du lourd au statut
        s.addLourd();

        // Cration d'une action entre la personne et le statut
        PersonnesStatutsEntity ps = new PersonnesStatutsEntity(p, s, 2, false, false);

        if (!s.getAuteur().equals(p)) {
            imcDAO.addIMC(s.getAuteur(), p);
        }

        // Si non existence d'une action, on sauvegarde, sinon on met juste  
        // jour
        if (s.addPersonnesStatuts(ps) && p.addPersonnesStatuts(ps)) {
            em.persist(ps);
        } else {
            setAction(p, s, TypeActions.lourd);
        }

        // Update de la BD
        // Simplification de merge avec setAction possible ?
        em.merge(p);
        em.merge(s);
    }

    /**
     * Suppression d'un lourd au statut
     *
     * @param s Statut duquel le lourd est supprim
     * @param p Personne supprimant le lourd Suppression de l'action par
     * l'utilisateur  dfinir ?
     */
    @Transactional
    @Override
    public void removeLourd(StatutsEntity s, PersonnesEntity p) {
        s.delLourd();
        if (!s.getAuteur().equals(p)) {
            imcDAO.removeIMC(s.getAuteur(), p);
        }
        em.merge(s);
    }

    /**
     * Ajout d'un lger au statut
     *
     * @param s Statut auquel le lger est ajout
     * @param p Personne ajoutant le lger
     */
    @Transactional
    @Override
    public void addCommentaire(StatutsEntity s, PersonnesEntity p) {
        // Cration d'une action entre la personne et le statut
        PersonnesStatutsEntity ps = new PersonnesStatutsEntity(p, s, 0, true, false);

        // Si non existence d'une action, on sauvegarde, sinon on met juste  
        // jour
        if (s.addPersonnesStatuts(ps) && p.addPersonnesStatuts(ps)) {
            em.persist(ps);
        } else {
            setCom(s, p);
        }
        // Update de la BD
        // Simplification de merge avec setAction possible ?
        em.merge(p);
        em.merge(s);
    }

    /**
     * Mise  jour de l'action de l'utilisateur sur le statut Modification des
     * TypeActions (lger, lourd, ou noAction)
     *
     * @param p Personne effectuant l'action sur le statut
     * @param s Statut sur lequel l'action est effectue
     * @param action Action effectue sur le statut
     */
    @Transactional
    public void setAction(PersonnesEntity p, StatutsEntity s, TypeActions action) {
        // Rcupration de la liste des PersonnesStatutsEntity associe 
        // au statut.
        // s ou p, peu importe puisque ce sont les mmes listes
        List<PersonnesStatutsEntity> setPS = s.getStatutsActeurs();

        // Parcours de la liste
        for (PersonnesStatutsEntity ps : setPS) {
            // Recherche de l'instance comprenant p et s
            if (ps.getPersonne().equals(p) && ps.getStatut().equals(s)) {
                // Mise  jour de l'action
                ps.setTypeAction(action);
                // Mise  jour dans la BD
                em.merge(ps);
                break;
            }
        }

        // Mise  jour des listes
        s.setStatutsActeurs(setPS);
        p.setStatutsActeurs(setPS);

        // Mise  jour de la BD
        em.merge(s);
        em.merge(p);
    }

    /**
     * Mise  jour de l'action de l'utilisateur sur le statut Modification du
     * commentaire de l'utilisateur
     *
     * @param p Personne effectuant l'action sur le statut
     * @param s Statut sur lequel l'action est effectue
     */
    @Transactional
    private void setCom(StatutsEntity s, PersonnesEntity p) {
        // Rcupration de la liste des PersonnesStatutsEntity associe 
        // au statut.
        // s ou p, peu importe puisque ce sont les mmes listes
        List<PersonnesStatutsEntity> setPS = s.getStatutsActeurs();

        // Parcours de la liste
        for (PersonnesStatutsEntity ps : setPS) {
            // Recherche de l'instance comprenant p et s
            if (ps.getPersonne().equals(p) && ps.getStatut().equals(s)) {
                // Mise  jour de l'action
                ps.setCommentaire(true);
                // Mise  jour dans la BD
                em.merge(ps);
                break;
            }
        }

        // Mise  jour des listes
        s.setStatutsActeurs(setPS);
        p.setStatutsActeurs(setPS);

        // Mise  jour de la BD
        em.merge(s);
        em.merge(p);
    }

    // Lecture =====================================================================
    @Transactional
    @Override
    public void addFichier(StatutsEntity se, FichiersEntity fe) {

        fe = em.merge(fe);
        em.persist(fe);

        fe.addStatutsFichier(se);
        se.addFichierStatuts(fe);
        se = em.merge(se);
        fe = em.merge(fe);

    }

    // Lecture =====================================================================
    @Transactional(readOnly = true)
    @Override
    public StatutsEntity find(int id) {
        Query q = em.createQuery("SELECT s FROM StatutsEntity s where s.id = ?");
        q.setParameter(1, id);
        try {
            return (StatutsEntity) q.getSingleResult();
        } catch (NoResultException e) {
            return null;
        }
    }

    @Transactional(readOnly = true)
    @Override
    public List<StatutsEntity> findAll() {
        Query q = em.createQuery("SELECT s FROM StatutsEntity s");
        return q.getResultList();
    }

    /**
     * NOT YET IMPLEMENTED
     *
     * @param auteurId
     * @return
     */
    @Transactional(readOnly = true)
    @Override
    public List<StatutsEntity> findByAuteur(int auteurId) {
        return null;
    }

}