/*
* Copyright (C) 2014 Thibaut Comte
*
* This is for your eyes only!
* Destroy after reading!
*/
package servlets;
import abonnements.gestionnaires.GestionnaireAbonnements;
import abonnements.modele.Abonnement;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import morceaux.gestionnaires.GestionnaireMorceaux;
import morceaux.modele.Morceau;
import utilisateurs.gestionnaires.GestionnaireUtilisateurs;
import utilisateurs.modele.Utilisateur;
/**
*
* @author Thibaut
*/
@WebServlet(name = "ServletUsers", urlPatterns = {"/ServletUsers"})
public class ServletUsers extends HttpServlet {
@EJB
private GestionnaireUtilisateurs gestionnaireUtilisateurs;
@EJB
private GestionnaireAbonnements gestionnaireAbonnements;
@EJB
private GestionnaireMorceaux gestionnaireMorceaux;
String forwardTo = "";
String message = "";
int code = 1;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Pratique pour décider de l'action à faire
String action = request.getParameter("action");
String nbpagination = request.getParameter("nbpagination");
int nbpagi = 0;
if (nbpagination != null) {
nbpagi = Integer.parseInt(nbpagination);
}
int sizeListe = 0;
HttpSession session = request.getSession(true);
String conneclogin = session.getAttribute("login") == null ? "fail" : session.getAttribute("login").toString();
String connecpassword = session.getAttribute("password") == null ? "fail" : session.getAttribute("password").toString();
Utilisateur user = gestionnaireUtilisateurs.getUserByLogin(conneclogin);
request.setAttribute("utilisateur", user);
//Connection
if (action.equals("connection")) {
conneclogin = request.getParameter("conneclogin");
connecpassword = request.getParameter("connecpassword");
user = gestionnaireUtilisateurs.getUserByLogin(conneclogin);
if (user == null || !user.getPassword().equals(connecpassword)) {
forwardTo = "index.jsp?action=error";
code = 1;
message = "Votre login/mot de passe n'existe et/ou n'est pas bon";
} else {
session.setAttribute("login", conneclogin);
session.setAttribute("password", connecpassword);
configureProfil(request, conneclogin);
sizeListe = gestionnaireMorceaux.countMorceaux(user);
message = "Bienvenue";
}
//Inscription
} else if (action.equals("inscription")) {
forwardTo = "index.jsp?action=inscription";
Collection<Abonnement> liste = gestionnaireAbonnements.getAllAbonnements();
request.setAttribute("listAbo", liste);
code = 0;
message = "";
//Créer un utilisateur
} else if (action.equals("creerUnUtilisateur")) {
createUser(request);
//Update utilisateur
} else if (action.equals("updateUtilisateur")) {
user = updateUser(request, user);
sizeListe = gestionnaireMorceaux.countMorceaux(user);
//Navigation dans le site en changeant
} else if (action.equals("reabonnement")) {
String abonnement = request.getParameter("abonnement");
Abonnement a = gestionnaireAbonnements.getAbonnementById(abonnement);
gestionnaireUtilisateurs.reAbonnement(user, a);
configureProfil(request, conneclogin);
sizeListe = gestionnaireMorceaux.countMorceaux(user);
message = "Vous êtes bien ré-abonné";
//Créer un utilisateur
} else if (user == null || !user.getPassword().equals(connecpassword)) {
session.setAttribute("login", null);
session.setAttribute("password", null);
forwardTo = "index.jsp?action=error";
code = 2;
message = "Vous n'êtes pas connecté!";
//Liste de tout les morceaux
} else if (action.equals("deconnexion")) {
session.setAttribute("Panier", null);
session.setAttribute("login", null);
session.setAttribute("password", null);
forwardTo = "index.jsp?action=todo";
code = 0;
message = "Au-revoir!";
//Show profil
} else if (action.equals("showProfil")) {
configureProfil(request, conneclogin);
sizeListe = gestionnaireMorceaux.countMorceaux(user);
//Default page
} else if (action.equals("addMorceau")) {
String panier = session.getAttribute("Panier").toString();
String[] tabPanier = panier.split("[;]");
System.out.println("panieeeeeeeeeeer : " + tabPanier.toString());
for(int i = 0; i < tabPanier.length; i++) {
tabPanier[i] = tabPanier[i].replaceAll("null","");
Morceau m = gestionnaireMorceaux.getMorceau(tabPanier[i]);
gestionnaireUtilisateurs.addMorceau(conneclogin, m);
}
configureProfil(request, conneclogin);
sizeListe = gestionnaireMorceaux.countMorceaux(user);
session.setAttribute("Panier", null);
//Panier
} else if (action.equals("addMorceauPanier")) {
String id = request.getParameter("id");
String panier = null;
double prix = 0;
if(session.getAttribute("Panier") != null) {
panier = session.getAttribute("Panier").toString() +id + ";";
System.out.println(panier);
session.setAttribute("Panier", panier);
} else {
panier = id +";";
session.setAttribute("Panier", panier);
System.out.println("Panier : " + panier);
}
Collection<Morceau> liste = new ArrayList<Morceau>();
if(session.getAttribute("Panier") != null) {
panier = session.getAttribute("Panier").toString();
String[] tabPanier = panier.split("[;]");
System.out.println("panieeeeeeeeeeer : " + tabPanier.toString());
for(int i = 0; i < tabPanier.length; i++) {
tabPanier[i] = tabPanier[i].replaceAll("null","");
Morceau m = gestionnaireMorceaux.getMorceau(tabPanier[i]);
if(!liste.contains(m)){
liste.add(m);
prix += m.getPrix();
}
}
}
String reduc = "Pas de réduction";
if(liste.size()>3 && liste.size()<= 5){
prix = 0.9*prix;
reduc = "10% de réduction";
}
else if(liste.size()>5 && liste.size()<= 10){
prix = 0.8*prix;
reduc = "20% de réduction";
}
else if(liste.size()>10){
prix = 0.7*prix;
reduc = "30% de réduction";
}
request.setAttribute("listeMorceaux", liste);
request.setAttribute("total", prix);
request.setAttribute("reduc", reduc);
forwardTo = "index.jsp?action=showPanier";
} else if (action.equals("showPanier")) {
double prix = 0;
Collection<Morceau> liste = new ArrayList<Morceau>();
if(session.getAttribute("Panier") != null) {
String panier = session.getAttribute("Panier").toString();
String[] tabPanier = panier.split("[;]");
System.out.println("panieeeeeeeeeeer : " + tabPanier.toString());
for(int i = 0; i < tabPanier.length; i++) {
tabPanier[i] = tabPanier[i].replaceAll("null","");
Morceau m = gestionnaireMorceaux.getMorceau(tabPanier[i]);
if(!liste.contains(m)){
prix += m.getPrix();
liste.add(m);
}
}
}
String reduc = "Pas de réduction";
if(liste.size()>3 && liste.size()<= 5){
prix = 0.9*prix;
reduc = "10% de réduction";
}
else if(liste.size()>5 && liste.size()<= 10){
prix = 0.8*prix;
reduc = "20% de réduction";
}
else if(liste.size()>10){
prix = 0.7*prix;
reduc = "30% de réduction";
}
request.setAttribute("listeMorceaux", liste);
request.setAttribute("total", prix);
request.setAttribute("reduc", reduc);
System.out.println("panier session : " + request.getAttribute("listeMorceaux") + "taille = " + liste.size() + " " + prix);
forwardTo = "index.jsp?action=showPanier";
} else {
forwardTo = "index.jsp?action=todo";
code = 2;
message = "La fonctionnalité pour le paramètre " + action + " est à implémenter !";
}
setPagination(request, nbpagi, sizeListe);
RequestDispatcher dp = request.getRequestDispatcher(forwardTo + "&message=" + message + "&code=" + code);
dp.forward(request, response);
// Après un forward, plus rien ne peut être exécuté après !
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
private int setPagination(HttpServletRequest request, int nbpagi, int sizeListe) {
if (nbpagi == 0) {
request.setAttribute("pagBefore", 0);
} else {
request.setAttribute("pagBefore", nbpagi - 1);
}
request.setAttribute("pagAfter", nbpagi + 1);
int nbPages = (int) sizeListe / 10;
request.setAttribute("nbPages", nbPages);
return nbpagi;
}
/**
* Create an user
*
* @param request
*/
private void createUser(HttpServletRequest request) {
String nom = request.getParameter("nom");
String prenom = request.getParameter("prenom");
String login = request.getParameter("login");
String password = request.getParameter("password");
String abonnement = request.getParameter("abonnement");
Abonnement a = gestionnaireAbonnements.getAbonnementById(abonnement);
Utilisateur u = null;
try {
u = gestionnaireUtilisateurs.creeUtilisateur(nom, prenom, login, password, a);
} catch (ParseException ex) {
Logger.getLogger(ServletUsers.class.getName()).log(Level.SEVERE, null, ex);
}
if (u == null) {
forwardTo = "index.jsp?action=error";
code = 2;
message = "Utilisateur déjà existant";
} else {
forwardTo = "index.jsp?action=success";
code = 0;
message = "Utilisateur créé";
}
}
/**
* Update an user
*
* @param request
*/
private Utilisateur updateUser(HttpServletRequest request, Utilisateur user) {
String nom = request.getParameter("nom");
String prenom = request.getParameter("prenom");
String login = request.getParameter("login");
String password = request.getParameter("password");
HttpSession session = request.getSession(true);
Utilisateur u = gestionnaireUtilisateurs.updateUtilisateur(user, nom, prenom, login, password);
request.setAttribute("utilisateur", u);
if (u == null) {
configureProfil(request,u.getLogin());
code = 2;
message = "Erreur dans l'update";
} else {
session.setAttribute("login", null);
session.setAttribute("password", null);
forwardTo = "index.jsp?action=deconnexion";
code = 0;
message = "Mise à jour réussi! Veuillez vous reconnecter";
}
return u;
}
private void configureProfil(HttpServletRequest request, String conneclogin) {
Utilisateur user = gestionnaireUtilisateurs.getUserByLogin(conneclogin);
request.setAttribute("utilisateur", user);
Collection<Abonnement> liste = gestionnaireAbonnements.getAllAbonnements();
request.setAttribute("listAbo", liste);
forwardTo = "index.jsp?action=showProfil";
code = 0;
message = "";
}
}