From ad2c9a6fa4fb6225d635e19e70c1a6bbaeca58ea Mon Sep 17 00:00:00 2001 From: Arnaud Tournier Date: Fri, 10 Nov 2017 13:32:17 +0100 Subject: [PATCH] javaee-projets-movie-db - nombre de produits par cat et fabr --- .../training/moviedb/ejb/GestionCategories.java | 7 +++++++ .../training/moviedb/ejb/GestionFabricants.java | 7 +++++++ .../training/moviedb/ejb/GestionGenerique.java | 11 +++++++++++ .../training/moviedb/model/Categorie.java | 17 +++++++++++++---- .../training/moviedb/outil/Vues.java | 7 +++++-- .../moviedb/servlet/CategoriesServlet.java | 11 +++++++++-- .../moviedb/servlet/FabricantsServlet.java | 9 ++++++++- .../src/main/webapp/WEB-INF/categories.jsp | 7 ++++++- .../src/main/webapp/WEB-INF/fabricants.jsp | 5 +++++ 9 files changed, 71 insertions(+), 10 deletions(-) diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionCategories.java b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionCategories.java index a071ae5..f3ec541 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionCategories.java +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionCategories.java @@ -3,10 +3,17 @@ import fr.lteconsulting.training.moviedb.model.Categorie; import javax.ejb.Stateless; +import javax.persistence.TypedQuery; @Stateless public class GestionCategories extends GestionGenerique { public GestionCategories() { super(Categorie.class); } + + public Long getNbProduitParCategorieId(Integer id) { + TypedQuery query = em.createQuery("select count(p) from Produit p where p.categorie.id=:id", Long.class); + query.setParameter("id", id); + return query.getSingleResult(); + } } diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionFabricants.java b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionFabricants.java index 3de6bfd..d79d608 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionFabricants.java +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionFabricants.java @@ -3,10 +3,17 @@ import fr.lteconsulting.training.moviedb.model.Fabricant; import javax.ejb.Stateless; +import javax.persistence.TypedQuery; @Stateless public class GestionFabricants extends GestionGenerique { public GestionFabricants() { super(Fabricant.class); } + + public Long getNbProduitParFabricantId(Integer id) { + TypedQuery query = em.createQuery("select count(p) from Produit p where p.fabricant.id=:id", Long.class); + query.setParameter("id", id); + return query.getSingleResult(); + } } diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionGenerique.java b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionGenerique.java index 91f80a9..5219218 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionGenerique.java +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/ejb/GestionGenerique.java @@ -5,6 +5,17 @@ import javax.persistence.PersistenceContext; import java.util.List; +/** + * Ceci est une implémentation générique d'un EJB d'accès aux données (souvent appelé DAO). + * + * Il apporte les opérations de base communes à toutes nos entités (Categorie, Fabricant et Produit). + * + * Il stocke la classe sur laquelle il travaille dans son attribut 'managedClass'. + * + * Les sous-classes concrètes pourront ajouter des méthodes selon les besoins spécifiques. + * + * @param Le type que l'EJB gère + */ @Stateless public abstract class GestionGenerique { @PersistenceContext(unitName = "Catalogue", name = "Catalogue") diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/model/Categorie.java b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/model/Categorie.java index 8fcf85a..e66245d 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/model/Categorie.java +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/model/Categorie.java @@ -1,9 +1,7 @@ package fr.lteconsulting.training.moviedb.model; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import javax.persistence.*; +import java.util.List; @Entity public class Categorie { @@ -11,6 +9,9 @@ public class Categorie { @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; + @OneToMany(mappedBy = "categorie") + private List produits; + private String nom; public Integer getId() { @@ -21,6 +22,14 @@ public void setId(Integer id) { this.id = id; } + public List getProduits() { + return produits; + } + + public void setProduits(List produits) { + this.produits = produits; + } + public String getNom() { return nom; } diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/outil/Vues.java b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/outil/Vues.java index 6d62abc..de2fc65 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/outil/Vues.java +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/outil/Vues.java @@ -9,10 +9,12 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; +import java.util.Map; public class Vues { - public static void afficherCategories(HttpServletRequest req, HttpServletResponse resp, List categories) throws ServletException, IOException { + public static void afficherCategories(HttpServletRequest req, HttpServletResponse resp, List categories, Map nbProduitsParCategorie) throws ServletException, IOException { req.setAttribute("categories", categories); + req.setAttribute("nbProduitsParCategorie", nbProduitsParCategorie); afficherPage(req, resp, "Visualisation des catégories", "categories"); } @@ -23,8 +25,9 @@ public static void afficherEditionCategorie(HttpServletRequest req, HttpServletR afficherPage(req, resp, "Edition catégorie", "editionCategorie"); } - public static void afficherFabricants(HttpServletRequest req, HttpServletResponse resp, List fabricants) throws ServletException, IOException { + public static void afficherFabricants(HttpServletRequest req, HttpServletResponse resp, List fabricants, Map nbProduitsParFabricant) throws ServletException, IOException { req.setAttribute("fabricants", fabricants); + req.setAttribute("nbProduitsParFabricant", nbProduitsParFabricant); afficherPage(req, resp, "Visualisation fabricants", "fabricants"); } diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/servlet/CategoriesServlet.java b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/servlet/CategoriesServlet.java index ee591fa..f86d3c5 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/servlet/CategoriesServlet.java +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/servlet/CategoriesServlet.java @@ -1,8 +1,8 @@ package fr.lteconsulting.training.moviedb.servlet; import fr.lteconsulting.training.moviedb.ejb.GestionCategories; -import fr.lteconsulting.training.moviedb.outil.Vues; import fr.lteconsulting.training.moviedb.model.Categorie; +import fr.lteconsulting.training.moviedb.outil.Vues; import javax.ejb.EJB; import javax.servlet.ServletException; @@ -11,7 +11,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; @WebServlet("/categories") public class CategoriesServlet extends HttpServlet { @@ -22,6 +24,11 @@ public class CategoriesServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { List categories = gestionCategories.findAll(); - Vues.afficherCategories(req, resp, categories); + Map nbProduitsParCategorie = new HashMap<>(); + for (Categorie categorie : categories) { + nbProduitsParCategorie.put(categorie.getId(), gestionCategories.getNbProduitParCategorieId(categorie.getId())); + } + + Vues.afficherCategories(req, resp, categories, nbProduitsParCategorie); } } diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/servlet/FabricantsServlet.java b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/servlet/FabricantsServlet.java index 961fd2a..8508452 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/servlet/FabricantsServlet.java +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/java/fr/lteconsulting/training/moviedb/servlet/FabricantsServlet.java @@ -11,7 +11,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; @WebServlet("/fabricants") public class FabricantsServlet extends HttpServlet { @@ -22,6 +24,11 @@ public class FabricantsServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { List fabricants = gestionFabricants.findAll(); - Vues.afficherFabricants(req, resp, fabricants); + Map nbProduitsParFabricant = new HashMap<>(); + for (Fabricant fabricant : fabricants) { + nbProduitsParFabricant.put(fabricant.getId(), gestionFabricants.getNbProduitParFabricantId(fabricant.getId())); + } + + Vues.afficherFabricants(req, resp, fabricants, nbProduitsParFabricant); } } diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/webapp/WEB-INF/categories.jsp b/formation-programmation-java/projets/javaee/movie-db/src/main/webapp/WEB-INF/categories.jsp index 1f393db..e712fcb 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/webapp/WEB-INF/categories.jsp +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/webapp/WEB-INF/categories.jsp @@ -1,9 +1,10 @@ <%@ page import="fr.lteconsulting.training.moviedb.model.Categorie" %> <%@ page import="java.util.List" %> +<%@ page import="java.util.Map" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> - + Categories @@ -12,6 +13,7 @@ <% List categories = (List) request.getAttribute("categories"); + Map nbProduitsParCategorie = (Map) request.getAttribute("nbProduitsParCategorie"); %>

Catégories

@@ -19,6 +21,7 @@ ID Nom + Nombre de produits Actions <% @@ -29,6 +32,8 @@ <%= categorie.getNom()%> + <%= nbProduitsParCategorie.get(categorie.getId())%> +
diff --git a/formation-programmation-java/projets/javaee/movie-db/src/main/webapp/WEB-INF/fabricants.jsp b/formation-programmation-java/projets/javaee/movie-db/src/main/webapp/WEB-INF/fabricants.jsp index 3a96453..fbe86a5 100644 --- a/formation-programmation-java/projets/javaee/movie-db/src/main/webapp/WEB-INF/fabricants.jsp +++ b/formation-programmation-java/projets/javaee/movie-db/src/main/webapp/WEB-INF/fabricants.jsp @@ -1,5 +1,6 @@ <%@ page import="fr.lteconsulting.training.moviedb.model.Fabricant" %> <%@ page import="java.util.List" %> +<%@ page import="java.util.Map" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> @@ -12,6 +13,7 @@ <% List fabricants = (List) request.getAttribute("fabricants"); + Map nbProduitsParFabricant = (Map) request.getAttribute("nbProduitsParFabricant"); %>

Fabricants

@@ -20,6 +22,7 @@ ID Nom Adresse + Nombre de produit Actions <% @@ -32,6 +35,8 @@ <%= fabricant.getAdresse()%> + <%= nbProduitsParFabricant.get(fabricant.getId())%> +