/*
* Copyright (C) 2014 Thibaut Comte
*
* This is for your eyes only!
* Destroy after reading!
*/
package utilisateurs.gestionnaires;
import abonnements.modele.Abonnement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import morceaux.modele.Morceau;
import utilisateurs.modele.Utilisateur;
/**
*
* @author Thibaut
*/
@Stateless
public class GestionnaireUtilisateurs {
// Ici injection de code : on n'initialise pas. L'entity manager sera créé
// à partir du contenu de persistence.xml
@PersistenceContext
private EntityManager em;
public Utilisateur creeUtilisateur(String nom, String prenom, String login, String password, Abonnement abonnement) throws ParseException {
Utilisateur up = getUserByLogin(login);
if (up == null) {
Utilisateur u;
if(login.equals("admin")){
String s = "2014-20-05";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-mm");
Date d;
d = sdf.parse(s);
//Date d = new Date();
u = new Utilisateur(login, nom, prenom, password, abonnement, d);
em.persist(u);
}else{
Date d = new Date();
u = new Utilisateur(login, nom, prenom, password, abonnement, d);
em.persist(u);
}
return u;
} else {
return null;
}
}
public Utilisateur updateUtilisateur(Utilisateur u, String nom, String prenom, String login, String password) {
u.setFirstname(prenom);
u.setLastname(nom);
u.setLogin(login);
u.setPassword(password);
em.merge(u);
Utilisateur up = getUserByLogin(login);
return up;
}
public Collection<Utilisateur> getAllUsers(int nbpagination) {
// Exécution d'une requête équivalente à un select *
Query q = em.createQuery("select u from Utilisateur u");
q.setFirstResult(nbpagination * 10);
q.setMaxResults(10);
return q.getResultList();
}
public int countUser() {
Query q = em.createQuery("select count (u) from Utilisateur u");
List results = q.getResultList();
return Integer.parseInt(results.get(0).toString());
}
public Utilisateur getUserByLogin(String login) {
Query q = em.createQuery("select u from Utilisateur u where u.login='" + login + "'");
List results = q.getResultList();
if (!results.isEmpty()) {
Iterator stIterator = results.iterator();
Utilisateur u = (Utilisateur) stIterator.next();
return u;
} else {
return null;
}
}
public Collection<Utilisateur> getUsersParVille(int idVille, int nbpagination) {
// Exécution d'une requête équivalente à un select *
Query q = em.createQuery("select u from Utilisateur u where u.adresse.id ='" + idVille + "'");
q.setFirstResult(nbpagination * 10);
q.setMaxResults(10);
return q.getResultList();
}
// Add business logic below. (Right-click in editor and choose
// "Insert Code > Add Business Method")
public int countUserByVille(int idVille) {
Query q = em.createQuery("select count (u) from Utilisateur u where u.adresse.id='" + idVille + "'");
List results = q.getResultList();
return Integer.parseInt(results.get(0).toString());
}
public void addMorceau(String login, Morceau m) {
Utilisateur u = getUserByLogin(login);
if (!u.getMorceaux().contains(m)) {
u.addMorceau(m);
em.merge(u);
}
}
public void reAbonnement(Utilisateur u ,Abonnement a) {
u.setAbonnement(a);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, a.getDuree());
u.setDateFin(cal.getTime());
em.merge(u);
}
/**
* Fonction qui n'est appellé qu'a l'init pour l'admin uniquement
*/
public void addAllMorceau(){
Utilisateur u = getUserByLogin("admin");
System.out.println(u);
Query q = em.createQuery("select u from Morceau u");
Collection<Morceau> listMorceau = q.getResultList();
for(Morceau m : listMorceau){
u.addMorceau(m);
}
em.merge(u);
}
}