diff --git a/src/main/java/fr/univ_amu/iut/dao/DAOUsage.java b/src/main/java/fr/univ_amu/iut/dao/DAOUsage.java index 24a649d..7b193f0 100644 --- a/src/main/java/fr/univ_amu/iut/dao/DAOUsage.java +++ b/src/main/java/fr/univ_amu/iut/dao/DAOUsage.java @@ -1,6 +1,13 @@ package fr.univ_amu.iut.dao; +import fr.univ_amu.iut.model.Academie; +import fr.univ_amu.iut.model.Discipline; +import fr.univ_amu.iut.model.Thematique; import fr.univ_amu.iut.model.Usage; +import java.util.List; + public interface DAOUsage extends DAO{ + List findByCriterias(Thematique thematique, Discipline discipline, Academie academie); + List findByName(String substring); } diff --git a/src/main/java/fr/univ_amu/iut/dao/jpa/DAOFactoryJPA.java b/src/main/java/fr/univ_amu/iut/dao/jpa/DAOFactoryJPA.java index b4d0549..e6a4d63 100644 --- a/src/main/java/fr/univ_amu/iut/dao/jpa/DAOFactoryJPA.java +++ b/src/main/java/fr/univ_amu/iut/dao/jpa/DAOFactoryJPA.java @@ -2,14 +2,46 @@ package fr.univ_amu.iut.dao.jpa; import fr.univ_amu.iut.dao.*; import fr.univ_amu.iut.dao.factory.DAOFactory; +import fr.univ_amu.iut.model.Academie; +import fr.univ_amu.iut.model.Discipline; +import fr.univ_amu.iut.model.RegionAcademique; +import fr.univ_amu.iut.model.Thematique; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.Persistence; +import java.util.ArrayList; +import java.util.Collection; + public class DAOFactoryJPA implements DAOFactory { private EntityManager entityManager; + + // Pas sûr de ou initialiser la base de données + /* + On part du principe que les données dans la base de données sont inconnues : + certaines données peuvent être insérées et d'autres non. Nous faisons attention aux erreurs + Nous essayons d'être persistents aux erreurs + */ + + + private void insertAllHelper(DAO dao, Collection list){ + if(dao.findAll().size()==0){ + entityManager.getTransaction().begin(); + list.forEach(obj -> entityManager.persist(obj)); + entityManager.getTransaction().commit(); + } + } + + public DAOFactoryJPA(){ + + insertAllHelper(createDAORegionAcademique(), RegionAcademique.toutes()); + insertAllHelper(createDAOAcademie(), Academie.toutes()); + insertAllHelper(createDAOThematique(), Thematique.toutes()); + insertAllHelper(createDAODiscipline(), Discipline.toutes()); + } + public EntityManager getEntityManager() { if(entityManager == null){ EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("gestionUsagesPU"); diff --git a/src/main/java/fr/univ_amu/iut/dao/jpa/DAOThematiqueJPA.java b/src/main/java/fr/univ_amu/iut/dao/jpa/DAOThematiqueJPA.java index fd29a25..da39696 100644 --- a/src/main/java/fr/univ_amu/iut/dao/jpa/DAOThematiqueJPA.java +++ b/src/main/java/fr/univ_amu/iut/dao/jpa/DAOThematiqueJPA.java @@ -22,7 +22,7 @@ public class DAOThematiqueJPA extends DAOBaseClassJPA implements DAO @Override public Thematique getById(int id) { TypedQuery query = entityManager.createNamedQuery("Thematique.findById", Thematique.class); - query.setParameter("numEt", id); + query.setParameter("id", id); return query.getSingleResult(); } } diff --git a/src/main/java/fr/univ_amu/iut/dao/jpa/DAOUsageJPA.java b/src/main/java/fr/univ_amu/iut/dao/jpa/DAOUsageJPA.java index 5101fe5..1c0a6cd 100644 --- a/src/main/java/fr/univ_amu/iut/dao/jpa/DAOUsageJPA.java +++ b/src/main/java/fr/univ_amu/iut/dao/jpa/DAOUsageJPA.java @@ -1,6 +1,9 @@ package fr.univ_amu.iut.dao.jpa; import fr.univ_amu.iut.dao.DAOUsage; +import fr.univ_amu.iut.model.Academie; +import fr.univ_amu.iut.model.Discipline; +import fr.univ_amu.iut.model.Thematique; import fr.univ_amu.iut.model.Usage; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; @@ -25,4 +28,21 @@ public class DAOUsageJPA extends DAOBaseClassJPA implements DAOUsage { query.setParameter("numEt", id); return query.getSingleResult(); } + + @Override + public List findByCriterias(Thematique thematique, Discipline discipline, Academie academie) { + TypedQuery query = entityManager.createNamedQuery("Usage.findByCriterias", Usage.class); + query.setParameter("thematique", thematique); + query.setParameter("discipline", discipline); + query.setParameter("academie", academie); + return query.getResultList(); + } + + + @Override + public List findByName(String substring) { + TypedQuery query = entityManager.createNamedQuery("Usage.findByName", Usage.class); + query.setParameter("substring", "%"+substring+"%"); + return query.getResultList(); + } } diff --git a/src/main/java/fr/univ_amu/iut/model/Academie.java b/src/main/java/fr/univ_amu/iut/model/Academie.java index 9e55f83..4d1b0ce 100644 --- a/src/main/java/fr/univ_amu/iut/model/Academie.java +++ b/src/main/java/fr/univ_amu/iut/model/Academie.java @@ -2,6 +2,7 @@ package fr.univ_amu.iut.model; import jakarta.persistence.*; +import java.io.Serializable; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -11,7 +12,7 @@ import java.util.Map; @NamedQuery(name = "Academie.findByCode", query = "SELECT p FROM Academie p WHERE p.code = :acaCode"), }) @Entity -public class Academie { +public class Academie implements Serializable { private final static HashMap INSTANCES = new HashMap<>(); @Transient public static Academie Mayotte = new Academie("MY", "Académie de Mayotte", RegionAcademique.Mayotte); @@ -125,4 +126,19 @@ public class Academie { ", regionAcademique=" + regionAcademique + '}'; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Academie academie = (Academie) o; + + return code.equals(academie.code); + } + + @Override + public int hashCode() { + return code.hashCode(); + } } \ No newline at end of file diff --git a/src/main/java/fr/univ_amu/iut/model/Acteur.java b/src/main/java/fr/univ_amu/iut/model/Acteur.java index ca8606e..b797644 100644 --- a/src/main/java/fr/univ_amu/iut/model/Acteur.java +++ b/src/main/java/fr/univ_amu/iut/model/Acteur.java @@ -2,12 +2,14 @@ package fr.univ_amu.iut.model; import jakarta.persistence.*; +import java.io.Serializable; + @NamedQueries({ @NamedQuery(name = "Acteur.findAll", query = "SELECT p FROM Acteur p"), @NamedQuery(name = "Acteur.findById", query = "SELECT p FROM Acteur p WHERE p.id = :id"), }) @Entity -public class Acteur { +public class Acteur implements Serializable { @Id @GeneratedValue int id; @@ -52,4 +54,24 @@ public class Acteur { ", identite='" + identite + '\'' + '}'; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Acteur acteur = (Acteur) o; + + if (id != acteur.id) return false; + if (!identite.equals(acteur.identite)) return false; + return type.equals(acteur.type); + } + + @Override + public int hashCode() { + int result = id; + result = 31 * result + identite.hashCode(); + result = 31 * result + type.hashCode(); + return result; + } } diff --git a/src/main/java/fr/univ_amu/iut/model/Discipline.java b/src/main/java/fr/univ_amu/iut/model/Discipline.java index 8248d1e..53a5074 100644 --- a/src/main/java/fr/univ_amu/iut/model/Discipline.java +++ b/src/main/java/fr/univ_amu/iut/model/Discipline.java @@ -2,11 +2,16 @@ package fr.univ_amu.iut.model; import jakarta.persistence.*; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; +@NamedQueries({ + @NamedQuery(name = "Discipline.findAll", query = "SELECT p FROM Discipline p"), + @NamedQuery(name = "Discipline.findById", query = "SELECT p FROM Discipline p WHERE p.id = :id"), +}) @Entity -public class Discipline { +public class Discipline implements Serializable { private static final List INSTANCES = new ArrayList<>(); @@ -44,7 +49,7 @@ public class Discipline { } public static List toutes() { - return INSTANCES; + return new ArrayList<>(INSTANCES); } public static Discipline getById(int id){ @@ -70,4 +75,22 @@ public class Discipline { ", nom='" + nom + '\'' + '}'; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Discipline that = (Discipline) o; + + if (id != that.id) return false; + return nom.equals(that.nom); + } + + @Override + public int hashCode() { + int result = id; + result = 31 * result + nom.hashCode(); + return result; + } } diff --git a/src/main/java/fr/univ_amu/iut/model/Niveau.java b/src/main/java/fr/univ_amu/iut/model/Niveau.java index 1a0e313..ff474b9 100644 --- a/src/main/java/fr/univ_amu/iut/model/Niveau.java +++ b/src/main/java/fr/univ_amu/iut/model/Niveau.java @@ -18,4 +18,12 @@ public enum Niveau { } return null; } + + + @Override + public String toString() { + return "Niveau{" + + "nom='" + nom + '\'' + + '}'; + } } diff --git a/src/main/java/fr/univ_amu/iut/model/RegionAcademique.java b/src/main/java/fr/univ_amu/iut/model/RegionAcademique.java index 74bdfb3..2e447f2 100644 --- a/src/main/java/fr/univ_amu/iut/model/RegionAcademique.java +++ b/src/main/java/fr/univ_amu/iut/model/RegionAcademique.java @@ -2,11 +2,16 @@ package fr.univ_amu.iut.model; import jakarta.persistence.*; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; +@NamedQueries({ + @NamedQuery(name = "RegionAcademique.findAll", query = "SELECT p FROM RegionAcademique p"), + @NamedQuery(name = "RegionAcademique.findById", query = "SELECT p FROM RegionAcademique p WHERE p.id = :id"), +}) @Entity -public class RegionAcademique { +public class RegionAcademique implements Serializable { private static List INSTANCES = new ArrayList<>(); @@ -80,4 +85,23 @@ public class RegionAcademique { public String getNom() { return nom; } + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + RegionAcademique that = (RegionAcademique) o; + + if (id != that.id) return false; + return nom.equals(that.nom); + } + + @Override + public int hashCode() { + int result = id; + result = 31 * result + nom.hashCode(); + return result; + } } diff --git a/src/main/java/fr/univ_amu/iut/model/Ressource.java b/src/main/java/fr/univ_amu/iut/model/Ressource.java index 3dfd19a..dd676c8 100644 --- a/src/main/java/fr/univ_amu/iut/model/Ressource.java +++ b/src/main/java/fr/univ_amu/iut/model/Ressource.java @@ -2,6 +2,7 @@ package fr.univ_amu.iut.model; import jakarta.persistence.*; +import java.io.Serializable; import java.net.MalformedURLException; import java.net.URL; @@ -10,7 +11,7 @@ import java.net.URL; @NamedQuery(name = "Ressource.findById", query = "SELECT p FROM Ressource p WHERE p.id = :id"), }) @Entity -public class Ressource { +public class Ressource implements Serializable { @Id @GeneratedValue int id; @@ -65,4 +66,19 @@ public class Ressource { ", lienRessource=" + lienRessource + '}'; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Ressource ressource = (Ressource) o; + + return id == ressource.id; + } + + @Override + public int hashCode() { + return id; + } } diff --git a/src/main/java/fr/univ_amu/iut/model/Thematique.java b/src/main/java/fr/univ_amu/iut/model/Thematique.java index 4fdf27b..f3e436b 100644 --- a/src/main/java/fr/univ_amu/iut/model/Thematique.java +++ b/src/main/java/fr/univ_amu/iut/model/Thematique.java @@ -2,13 +2,18 @@ package fr.univ_amu.iut.model; import jakarta.persistence.*; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; +@NamedQueries({ + @NamedQuery(name = "Thematique.findAll", query = "SELECT p FROM Thematique p"), + @NamedQuery(name = "Thematique.findById", query = "SELECT p FROM Thematique p WHERE p.id = :id"), +}) @Entity -public class Thematique { +public class Thematique implements Serializable { private final static List INSTANCES = new ArrayList<>(); @@ -88,4 +93,22 @@ public class Thematique { ", nom='" + nom + '\'' + '}'; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Thematique that = (Thematique) o; + + if (id != that.id) return false; + return nom.equals(that.nom); + } + + @Override + public int hashCode() { + int result = id; + result = 31 * result + nom.hashCode(); + return result; + } } diff --git a/src/main/java/fr/univ_amu/iut/model/Usage.java b/src/main/java/fr/univ_amu/iut/model/Usage.java index 9607fd0..9591944 100644 --- a/src/main/java/fr/univ_amu/iut/model/Usage.java +++ b/src/main/java/fr/univ_amu/iut/model/Usage.java @@ -2,17 +2,23 @@ package fr.univ_amu.iut.model; import jakarta.persistence.*; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @NamedQueries({ @NamedQuery(name = "Usage.findAll", query = "SELECT p FROM Usage p"), @NamedQuery(name = "Usage.findById", query = "SELECT p FROM Usage p WHERE p.id = :id"), + @NamedQuery(name = "Usage.findByName", query = "SELECT p FROM Usage p WHERE p.nom LIKE :substring"), + @NamedQuery(name = "Usage.findByCriterias", query = "SELECT p FROM Usage p WHERE" + + "(:thematique is null or :thematique=p.thematique)" + + "AND (:discipline is null or :discipline=p.discipline)"+ + "AND (:academie is null or :academie=p.academie)"), }) @Entity @Table(name="\"USAGE\"") -public class Usage { +public class Usage implements Serializable { @Id @GeneratedValue int id; @@ -132,4 +138,19 @@ public class Usage { ", commentaire='" + commentaire + '\'' + '}'; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Usage usage = (Usage) o; + + return id == usage.id; + } + + @Override + public int hashCode() { + return id; + } }