DAO.PersonnesDAOImpl.java Source code

Java tutorial

Introduction

Here is the source code for DAO.PersonnesDAOImpl.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 java.util.List;
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 PersonnesDAOImpl implements PersonnesDAO {

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

    public EntityManager getEm() {
        return em;
    }

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

    // Ecriture ====================================================================
    @Transactional
    @Override

    public void save(PersonnesEntity p) {
        p = em.merge(p);
        em.persist(p);
    }

    @Transactional
    @Override
    public void update(PersonnesEntity p) {
        em.merge(p);
    }

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

    /**
     * Ajout d'un filou par l'utilisateur
     *
     * @param p1 Utilisateur
     * @param p2 Filous  ajouter
     * @return true si l'ajout s'est effectu correctement
     */
    @Transactional
    @Override
    public boolean ajoutFilous(PersonnesEntity p1, PersonnesEntity p2) {
        // Ajout dans la table de jointure
        boolean added = p1.ajoutFilous(p2);
        added = added && p2.ajoutFilousDe(p1);

        // Mise  jour de la BD
        if (added) {
            em.merge(p1);
            em.merge(p2);
        }
        return added;
    }

    /**
     * Suppression d'un filou par l'utilisateur
     *
     * @param p1 Utilisateur
     * @param p2 Filous  supprimer
     * @return true si la suppression s'est fait correctemnt
     */
    @Transactional
    @Override
    public boolean suppressionFilous(PersonnesEntity p1, PersonnesEntity p2) {
        // Suppression de la table de jointure
        boolean delete = p1.suppressionFilous(p2);
        delete = delete && p2.suppressionFilousDe(p1);

        // Mise  jour de la BD
        if (delete) {
            em.merge(p1);
            em.merge(p2);
        }
        return delete;
    }

    /**
     * Ajout d'un statut mis par l'utilisateur
     *
     * @param p Utilisateur
     * @param s Statut  ajouter
     * @return true si l'ajout s'est effectu correctement
     */
    @Transactional
    @Override
    public boolean ajoutStatutEmis(PersonnesEntity p, StatutsEntity s) {
        // Ajout du statut dans la liste des statuts mis par l'utilisateur
        boolean add = p.ajoutStatutEmis(s);

        // Mise  jour de la BD
        if (add) {
            em.merge(p);
        }
        return add;
    }

    /**
     * Ajout d'un statut post sur le mur de la personne
     *
     * @param p Utilisateur
     * @param s Statut  ajouter
     * @return true si l'ajout s'est effectu correctement
     */
    @Transactional
    @Override
    public boolean ajoutStatutRecu(PersonnesEntity p, StatutsEntity s) {
        // Ajout du statut dans la liste des statuts mis par l'utilisateur
        boolean add = p.ajoutStatutRecu(s);

        // Mise  jour de la BD
        if (add) {
            em.merge(p);
        }
        return add;
    }

    /**
     * Ajout d'une notification
     *
     * @param notifieur Personne ayant fait l'action ncessitant une
     * notification
     * @param destinataire Personnes recevant la notification
     * @param notif Notification  envoyer
     * @return true si l'ajout s'est effectu correctement
     */
    @Transactional
    @Override
    public boolean ajoutNotif(PersonnesEntity notifieur, PersonnesEntity destinataire, NotificationsEntity notif) {

        // Mise  jour des personnes
        boolean added = notifieur.ajoutNotificationEmise(notif);
        added = added && destinataire.ajoutNotificationsRecu(notif);

        // Incrmentation du nombre de notification du destinataire
        destinataire.addNotif();

        // Mise  jour de la BD
        if (added) {
            em.merge(notifieur);
            em.merge(destinataire);
        }

        return added;
    }

    @Transactional
    @Override
    public boolean ajoutMessageEnvoi(PersonnesEntity sender, MessagesEntity newMessagesEntity) {
        boolean add = sender.ajoutMessagesEmis(newMessagesEntity);

        if (add) {
            em.merge(sender);
        }

        return add;
    }

    @Transactional
    @Override
    public boolean ajoutMessageRecu(PersonnesEntity dest, MessagesEntity newMessagesEntity) {
        boolean add = dest.ajoutMessagesRecu(newMessagesEntity);

        if (add) {
            em.merge(dest);
        }

        return add;
    }
    // Lecture =====================================================================

    @Transactional(readOnly = true)
    @Override

    public PersonnesEntity find(int id) {
        Query q = em.createQuery("SELECT p FROM PersonnesEntity p where p.id = ?");
        q.setParameter(1, id);
        try {
            return (PersonnesEntity) q.getSingleResult();
        } catch (NoResultException e) {
            return null;
        }
    }

    @Transactional(readOnly = true)
    @Override
    public PersonnesEntity find(String login, String password) {
        Query q = em.createQuery(
                "SELECT p FROM PersonnesEntity p " + "WHERE p.login = :login AND p.password = :password");
        q.setParameter("login", login);
        q.setParameter("password", password);
        PersonnesEntity p = null;
        if (q.getResultList().size() == 1) {
            p = (PersonnesEntity) q.getSingleResult();
        }
        return p;
    }

    @Transactional(readOnly = true)
    @Override
    public List<PersonnesEntity> findFilous(int id) {
        Query q = em.createQuery("SELECT pl FROM PersonnesEntity P JOIN P.listFilous pl " + "WHERE P.id = ?");
        q.setParameter(1, id);
        return ((PersonnesEntity) q.getSingleResult()).getListFilous();
    }

    @Transactional(readOnly = true)
    @Override
    public PersonnesEntity findByLogin(String login) {
        Query q = em.createQuery("SELECT p FROM PersonnesEntity p " + "WHERE p.login = ?");
        q.setParameter(1, login);
        PersonnesEntity p = null;
        if (q.getResultList().size() == 1) {
            p = (PersonnesEntity) q.getSingleResult();
        }
        return p;
    }

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

    /**
     * NOT YET IMPLEMENTED
     *
     * @param nom
     * @return
     */
    @Transactional(readOnly = true)
    @Override
    public List<PersonnesEntity> findByNom(String nom) {
        return null;
    }

    /**
     * NOT YET IMPLEMENTED
     *
     * @param prenom
     * @return
     */
    @Transactional(readOnly = true)
    @Override
    public List<PersonnesEntity> findByPrenom(String prenom) {
        return null;
    }

    /**
     * NOT YET IMPLEMENTED
     *
     * @param mail
     * @return
     */
    @Transactional(readOnly = true)
    @Override
    public List<PersonnesEntity> findByMail(String mail) {
        return null;
    }

}