Java tutorial
/* * 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; } }