From bd301f169d10e8184a73286f82ed5e8e828fc6a1 Mon Sep 17 00:00:00 2001 From: Vu Tuan Minh Date: Wed, 1 Oct 2025 13:32:45 +0200 Subject: [PATCH] FIX XML ADD MAPPING --- README.md | 1 + .../istic/taa/jaxrs/DAO/UtilisateurDAO.java | 1 - .../fr/istic/taa/jaxrs/DTO/QuestionDTO.java | 8 +++-- .../java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java | 10 ++++--- .../fr/istic/taa/jaxrs/DTO/ReponseDTO.java | 10 ------- .../fr/istic/taa/jaxrs/DTO/SessionDTO.java | 13 +++++++-- .../istic/taa/jaxrs/DTO/UtilisateurDTO.java | 5 ++-- .../taa/jaxrs/Mapper/QuestionMapper.java | 14 +++++++++ .../istic/taa/jaxrs/Mapper/QuizzMapper.java | 20 +++++++++++++ .../istic/taa/jaxrs/Mapper/ReponseMapper.java | 12 -------- .../istic/taa/jaxrs/Mapper/SessionMapper.java | 29 ++++++++++++++++++- .../java/fr/istic/taa/jaxrs/metier/Quizz.java | 4 --- .../fr/istic/taa/jaxrs/metier/Session.java | 1 + .../taa/jaxrs/rest/QuestionResource.java | 8 +++++ .../istic/taa/jaxrs/rest/QuizzResource.java | 8 +++++ .../istic/taa/jaxrs/rest/SessionResource.java | 8 ++--- .../taa/jaxrs/rest/UtilisateurResource.java | 7 ++--- 17 files changed, 110 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/fr/istic/taa/jaxrs/DTO/ReponseDTO.java delete mode 100644 src/main/java/fr/istic/taa/jaxrs/Mapper/ReponseMapper.java diff --git a/README.md b/README.md index ebc241f..4476d19 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ |---------|-----------------|------------------------------------| | GET | `/session` | Retourne toute la liste du session | | GET | `/session/{id}` | Retourne la session par id | +|GET | ## Auteurs diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java index 8d19a0d..349e7e7 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java @@ -1,7 +1,6 @@ package fr.istic.taa.jaxrs.DAO; import jakarta.persistence.EntityTransaction; -import jakarta.persistence.Query; import fr.istic.taa.jaxrs.metier.Session; import fr.istic.taa.jaxrs.metier.Utilisateur; diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java index fd7aaf4..60211d7 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java @@ -1,13 +1,15 @@ package fr.istic.taa.jaxrs.DTO; -import lombok.AllArgsConstructor; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Data; -import lombok.NoArgsConstructor; + +import java.util.List; @Data +@XmlRootElement public class QuestionDTO { private int id; private String question; - private String reponse; + private List reponses_string; } diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java index 70d8366..d7cfd39 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java @@ -1,12 +1,14 @@ package fr.istic.taa.jaxrs.DTO; -import lombok.AllArgsConstructor; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Data; -import lombok.NoArgsConstructor; +import java.util.List; @Data - +@XmlRootElement public class QuizzDTO { private int id; - + private Integer sessionId; + private Integer utilisateurId; + private List questionsId; } diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/ReponseDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/ReponseDTO.java deleted file mode 100644 index 9020042..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/ReponseDTO.java +++ /dev/null @@ -1,10 +0,0 @@ -package fr.istic.taa.jaxrs.DTO; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data - -public class ReponseDTO { -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java index b0a454c..82cfc39 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java @@ -1,10 +1,17 @@ package fr.istic.taa.jaxrs.DTO; -import lombok.AllArgsConstructor; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Data; -import lombok.NoArgsConstructor; + +import java.util.List; @Data - +@XmlRootElement public class SessionDTO { + private String theme; + private int codePIN; + private int id; + + private List quizzsId; + private List utilisateursId; } diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java index e3ce5e9..de65d4b 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java @@ -1,11 +1,10 @@ package fr.istic.taa.jaxrs.DTO; -import lombok.AllArgsConstructor; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Data; -import lombok.NoArgsConstructor; @Data - +@XmlRootElement public class UtilisateurDTO { private int id; private String name; diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java index 1911583..cc35669 100644 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java @@ -2,11 +2,25 @@ package fr.istic.taa.jaxrs.Mapper; import fr.istic.taa.jaxrs.DTO.QuestionDTO; import fr.istic.taa.jaxrs.metier.Question; +import fr.istic.taa.jaxrs.metier.Reponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; +import java.util.ArrayList; +import java.util.List; + +@Mapper public interface QuestionMapper { QuestionMapper INSTANCE = Mappers.getMapper( QuestionMapper.class ); + + @Mapping(target = "reponses_string", expression = "java(question_ReponseString(question.getReponse()))") QuestionDTO toDTO(Question question); + Question toEntity(QuestionDTO questionDTO); + + default List question_ReponseString(Reponse reponse){ + return reponse.getReponses(); + } } diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java index 83e60fc..7043082 100644 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java @@ -1,12 +1,32 @@ package fr.istic.taa.jaxrs.Mapper; import fr.istic.taa.jaxrs.DTO.QuizzDTO; +import fr.istic.taa.jaxrs.metier.Question; import fr.istic.taa.jaxrs.metier.Quizz; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; +import java.util.ArrayList; +import java.util.List; + +@Mapper public interface QuizzMapper { QuizzMapper INSTANCE = Mappers.getMapper( QuizzMapper.class ); + //https://www.baeldung.com/mapstruct-map-source-object-target-list + //https://mapstruct.org/ + @Mapping(target="sessionId", source="session.id") + @Mapping(target="utilisateurId", source = "utilisateur.id") + @Mapping(target="questionsId",expression="java(function_mapQ(quizz.getQuestions()))") QuizzDTO toDTO(Quizz quizz); Quizz toEntity(QuizzDTO quizzDTO); + + default List function_mapQ(List questionList){ + List list=new ArrayList(); + for(Question question : questionList){ + list.add(question.getId()); + } + return list; + } } diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/ReponseMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/ReponseMapper.java deleted file mode 100644 index 4df65de..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/ReponseMapper.java +++ /dev/null @@ -1,12 +0,0 @@ -package fr.istic.taa.jaxrs.Mapper; - -import fr.istic.taa.jaxrs.DTO.ReponseDTO; -import fr.istic.taa.jaxrs.metier.Reponse; -import org.mapstruct.factory.Mappers; - -public interface ReponseMapper { - ReponseMapper INSTANCE = Mappers.getMapper( ReponseMapper.class ); - - Reponse toEntity(ReponseDTO reponseDTO); - ReponseDTO toDTO(Reponse reponse); -} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java index 4a412ac..a31d023 100644 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java @@ -1,13 +1,40 @@ package fr.istic.taa.jaxrs.Mapper; import fr.istic.taa.jaxrs.DTO.SessionDTO; +import fr.istic.taa.jaxrs.metier.Quizz; import fr.istic.taa.jaxrs.metier.Session; +import fr.istic.taa.jaxrs.metier.Utilisateur; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; +import java.util.ArrayList; +import java.util.List; + +@Mapper public interface SessionMapper { SessionMapper INSTANCE = Mappers.getMapper( SessionMapper.class ); - SessionDTO toDTO(Session utilisateur); + @Mapping(target="utilisateursId",expression="java(function_mapU(session.getUtilisateurs()))") + @Mapping(target="quizzsId",expression="java(function_mapQ(session.getQuizzs()))") + SessionDTO toDTO(Session session); Session toEntity(SessionDTO sessionDTO); + + //https://www.baeldung.com/mapstruct-map-source-object-target-list + default List function_mapU(List utilisateurList) { + List result = new ArrayList<>(); + for (Utilisateur utilisateur : utilisateurList) { + result.add(utilisateur.getId()); + } + return result; + } + + default List function_mapQ(List quizzList) { + List result = new ArrayList<>(); + for (Quizz quizz : quizzList) { + result.add(quizz.getId()); + } + return result; + } } diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java b/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java index 9cb4efa..4a312bc 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java +++ b/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java @@ -27,8 +27,4 @@ public class Quizz implements Serializable { @OneToMany(mappedBy = "quizz") private List questions=new ArrayList(); - - public void addQuestion(Question question) { - this.questions.add(question); - } } \ No newline at end of file diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Session.java b/src/main/java/fr/istic/taa/jaxrs/metier/Session.java index 902ffe7..1c2ef0f 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Session.java +++ b/src/main/java/fr/istic/taa/jaxrs/metier/Session.java @@ -20,6 +20,7 @@ public class Session implements Serializable { @Column(unique=true) private int codePIN; + @OneToMany(mappedBy="session") private List quizzs = new ArrayList<>(); diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java index 1e2e64a..6f6dc18 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java @@ -1,4 +1,12 @@ package fr.istic.taa.jaxrs.rest; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("question") +@Consumes({"application/json", "application/xml"}) +@Produces({"application/json", "application/xml"}) public class QuestionResource { } diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java index 94e61d2..114a908 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java @@ -1,4 +1,12 @@ package fr.istic.taa.jaxrs.rest; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("quizz") +@Consumes({"application/json", "application/xml"}) +@Produces({"application/json", "application/xml"}) public class QuizzResource { } diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java index 01f1f30..b5cac4e 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java @@ -14,11 +14,11 @@ import org.mapstruct.factory.Mappers; import java.util.List; @Path("session") -@Consumes(MediaType.APPLICATION_JSON) -@Produces(MediaType.APPLICATION_JSON) +@Consumes({"application/json", "application/xml"}) +@Produces({"application/json", "application/xml"}) public class SessionResource { private final SessionDAO sessionDAO = new SessionDAO(); - private final SessionMapper mapper = Mappers.getMapper(SessionMapper.class); + private final SessionMapper mapper = SessionMapper.INSTANCE; @GET public List listSession() { @@ -34,7 +34,7 @@ public class SessionResource { return Response.status(Response.Status.NOT_FOUND).build(); } SessionDTO result = mapper.toDTO(session); - return Response.status(Response.Status.OK).build(); + return Response.status(Response.Status.OK).entity(result).build(); } diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java index 0689144..1d00f91 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java @@ -15,12 +15,11 @@ import java.util.Collections; import java.util.List; @Path("utilisateur") -@Consumes(MediaType.APPLICATION_JSON) -@Produces(MediaType.APPLICATION_JSON) +@Consumes({"application/json", "application/xml"}) +@Produces({"application/json", "application/xml"}) public class UtilisateurResource { private final UtilisateurDAO utilisateurDAO = new UtilisateurDAO(); - private final UtilisateurMapper mapper = Mappers.getMapper(UtilisateurMapper.class); - + private final UtilisateurMapper mapper = UtilisateurMapper.INSTANCE; @GET public List listUtilisateur() { List utilisateurs = utilisateurDAO.findAll();