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 java.util.Set; 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 Thomas */ @Repository public class PersonnesStatutsDAOImpl implements PersonnesStatutsDAO { @Resource StatutsDAO statutDAO; // Communication avec la BD @PersistenceContext(unitName = "Yaourt_PU") private EntityManager em; public EntityManager getEm() { return em; } // Ecriture ==================================================================== public void setEm(EntityManager em) { this.em = em; } @Transactional @Override public void save(PersonnesStatutsEntity ps) { ps = em.merge(ps); em.persist(ps); } @Transactional @Override public void update(PersonnesStatutsEntity ps) { em.merge(ps); } @Transactional @Override public void delete(PersonnesStatutsEntity ps) { ps = em.merge(ps); em.remove(ps); } /** * Cration d'une action par l'utilisateurs sur le statut par le posteur. * Met le champ post de PersonnesStatutsEntity true * * @param idStatut id du statut que la personne poste * @param p Personne ajoutant le lger */ @Transactional @Override public void addPost(int idStatut, PersonnesEntity p) { // Rcupration du statut StatutsEntity s = statutDAO.find(idStatut); // Cration d'une action entre la personne et le statut PersonnesStatutsEntity ps = new PersonnesStatutsEntity(p, s, 0, false, true); em.persist(ps); PersonnesStatutsEntity ps2 = find(p, s); // Mise jour des listes s.addPersonnesStatuts(ps2); p.addPersonnesStatuts(ps2); // Update de la BD em.merge(p); em.merge(s); } /** * Annule une action de l'utilisateur Passe le type d'action noAction * * @param p la oersonne effectuant l'action, * @param s le statut sur lequel l'action effectue l'action * @return null, noAction, leger, lourd */ @Transactional @Override public TypeActions removeAction(PersonnesEntity p, StatutsEntity s) { // Rcupration de la liste des PersonnesStatutsEntity associe // au statut. // s ou p, peu importe puisque ce sont les mme listes List<PersonnesStatutsEntity> setPS = s.getStatutsActeurs(); TypeActions typeAction = null; // 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)) { // Rcupration de la dernire action effectue sur le statut typeAction = ps.getTypeAction(); // Ecrasement de l'action ps.setTypeAction(TypeActions.noAction); // Mise jour de 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); return typeAction; } // Lecture ===================================================================== @Transactional(readOnly = true) @Override public PersonnesStatutsEntity find(PersonnesEntity p, StatutsEntity s) { Query q = em.createQuery( "SELECT ps FROM PersonnesStatutsEntity ps WHERE ps.personne.id = ? AND ps.statut.id = ?"); q.setParameter(1, p.getId()); q.setParameter(2, s.getId()); try { return (PersonnesStatutsEntity) q.getSingleResult(); } catch (NoResultException e) { return null; } } @Transactional(readOnly = true) @Override public List<PersonnesStatutsEntity> findAll() { Query q = em.createQuery("SELECT ps FROM PersonnesStatutsEntity ps"); return q.getResultList(); } @Transactional(readOnly = true) @Override public boolean exist(PersonnesEntity p, StatutsEntity s) { Query q = em.createQuery( "SELECT ps FROM PersonnesStatutsEntity ps WHERE ps.personne.id = ? AND ps.statut.id = ?"); q.setParameter(1, p.getId()); q.setParameter(2, s.getId()); return q.getSingleResult() != null; } }