REST API works
This commit is contained in:
124
pom.xml
Normal file
124
pom.xml
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>fr.istic.taa</groupId>
|
||||||
|
<artifactId>jaxrs-example</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<name>jaxrs-example</name>
|
||||||
|
<url>http://maven.apache.org</url>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>11</maven.compiler.source>
|
||||||
|
<maven.compiler.target>11</maven.compiler.target>
|
||||||
|
<org.mapstruct.version>1.6.3</org.mapstruct.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- https://mvnrepository.com/artifact/junit/junit -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.12</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- ==== JPA / Hibernate ==== -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hibernate</groupId>
|
||||||
|
<artifactId>hibernate-core</artifactId>
|
||||||
|
<version>6.2.7.Final</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-log4j12</artifactId>
|
||||||
|
<version>1.7.30</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hsqldb</groupId>
|
||||||
|
<artifactId>hsqldb</artifactId>
|
||||||
|
<version>2.7.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-j</artifactId>
|
||||||
|
<version>8.1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- ==== REST API ==== -->
|
||||||
|
<!--https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-undertow -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>resteasy-undertow</artifactId>
|
||||||
|
<version>6.2.4.Final</version>
|
||||||
|
</dependency>
|
||||||
|
<!--https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jackson2-provider -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>resteasy-jackson2-provider</artifactId>
|
||||||
|
<version>6.2.4.Final</version>
|
||||||
|
</dependency>
|
||||||
|
<!--https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jaxb-provider -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>resteasy-jaxb-provider</artifactId>
|
||||||
|
<version>6.2.4.Final</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- OpenAPI-->
|
||||||
|
<!--https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-jaxrs2-jakarta -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.swagger.core.v3</groupId>
|
||||||
|
<artifactId>swagger-jaxrs2-jakarta</artifactId>
|
||||||
|
<version>2.2.15</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.swagger.core.v3</groupId>
|
||||||
|
<artifactId>swagger-jaxrs2-servlet-initializer-v2</artifactId>
|
||||||
|
<version>2.2.15</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- ==== MapStruct/ Lombok ==== -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mapstruct</groupId>
|
||||||
|
<artifactId>mapstruct</artifactId>
|
||||||
|
<version>1.6.3</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.42</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<defaultGoal>install</defaultGoal>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.11.0</version>
|
||||||
|
<configuration>
|
||||||
|
<source>11</source>
|
||||||
|
<target>11</target>
|
||||||
|
<annotationProcessorPaths>
|
||||||
|
<path>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.42</version>
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<groupId>org.mapstruct</groupId>
|
||||||
|
<artifactId>mapstruct-processor</artifactId>
|
||||||
|
<version>1.6.3</version>
|
||||||
|
</path>
|
||||||
|
</annotationProcessorPaths>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
3
run-hsqldb-server.bat
Executable file
3
run-hsqldb-server.bat
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
mkdir data
|
||||||
|
cd data
|
||||||
|
java -cp ..\hsqldb-2.7.2.jar org.hsqldb.Server
|
||||||
4
run-hsqldb-server.sh
Executable file
4
run-hsqldb-server.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
mvn dependency:copy-dependencies
|
||||||
|
mkdir data 2> /dev/null
|
||||||
|
cd data
|
||||||
|
java -cp ../target/dependency/hsqldb-2.7.2.jar org.hsqldb.Server
|
||||||
2
show-hsqldb.bat
Normal file
2
show-hsqldb.bat
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
java -cp ./target/dependency/hsqldb-2.7.2.jar org.hsqldb.util.DatabaseManagerSwing --driver org.hsqldb.jdbcDriver --url jdbc:hsqldb:hsql://localhost/ --user SA
|
||||||
|
|
||||||
2
show-hsqldb.sh
Executable file
2
show-hsqldb.sh
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#mvn dependency:copy-dependencies
|
||||||
|
java -cp ./target/dependency/hsqldb-2.7.2.jar org.hsqldb.util.DatabaseManagerSwing --driver org.hsqldb.jdbcDriver --url jdbc:hsqldb:hsql://localhost/ --user SA
|
||||||
60
src/main/java/fr/istic/taa/jaxrs/DAO/AbstractJpaDao.java
Normal file
60
src/main/java/fr/istic/taa/jaxrs/DAO/AbstractJpaDao.java
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DAO;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityManager;
|
||||||
|
import jakarta.persistence.EntityTransaction;
|
||||||
|
public abstract class AbstractJpaDao<K, T extends Serializable> implements IGenericDao<K, T> {
|
||||||
|
protected EntityManager em;
|
||||||
|
private Class<T> entityClass;
|
||||||
|
|
||||||
|
public AbstractJpaDao() {
|
||||||
|
this.em = EntityManagerHelper.getEntityManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Pour connaitre qu'on travaille avec quelle classe
|
||||||
|
public void setClass(Class<T> class2){
|
||||||
|
this.entityClass= class2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T findOne(K id) {
|
||||||
|
return em.find(entityClass, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<T> findAll() {
|
||||||
|
return em.createQuery("select e from " + entityClass.getName() + " as e", entityClass).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
//CRUD
|
||||||
|
public void create(T entity){
|
||||||
|
EntityTransaction t = em.getTransaction();
|
||||||
|
t.begin();
|
||||||
|
em.persist(entity);
|
||||||
|
t.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T findById(K id) {
|
||||||
|
return em.find(entityClass, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T update(T entity){
|
||||||
|
EntityTransaction t = em.getTransaction();
|
||||||
|
t.begin();
|
||||||
|
T T_sync = em.merge(entity);
|
||||||
|
t.commit();
|
||||||
|
return T_sync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(T entity){
|
||||||
|
EntityTransaction t = em.getTransaction();
|
||||||
|
t.begin();
|
||||||
|
em.remove(entity);
|
||||||
|
t.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteById(K id) {
|
||||||
|
T T_to_be_deleted = em.find(entityClass, id);
|
||||||
|
em.remove(T_to_be_deleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DAO;
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityManager;
|
||||||
|
import jakarta.persistence.EntityManagerFactory;
|
||||||
|
import jakarta.persistence.Persistence;
|
||||||
|
|
||||||
|
public class EntityManagerHelper {
|
||||||
|
|
||||||
|
private static final EntityManagerFactory emf;
|
||||||
|
private static final ThreadLocal<EntityManager> threadLocal;
|
||||||
|
|
||||||
|
static {
|
||||||
|
emf = Persistence.createEntityManagerFactory("dev");
|
||||||
|
threadLocal = new ThreadLocal<EntityManager>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EntityManager getEntityManager() {
|
||||||
|
EntityManager em = threadLocal.get();
|
||||||
|
|
||||||
|
if (em == null) {
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
threadLocal.set(em);
|
||||||
|
}
|
||||||
|
return em;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void closeEntityManager() {
|
||||||
|
EntityManager em = threadLocal.get();
|
||||||
|
if (em != null) {
|
||||||
|
em.close();
|
||||||
|
threadLocal.set(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void closeEntityManagerFactory() {
|
||||||
|
emf.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void beginTransaction() {
|
||||||
|
getEntityManager().getTransaction().begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void rollback() {
|
||||||
|
getEntityManager().getTransaction().rollback();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void commit() {
|
||||||
|
getEntityManager().getTransaction().commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/main/java/fr/istic/taa/jaxrs/DAO/IGenericDao.java
Normal file
14
src/main/java/fr/istic/taa/jaxrs/DAO/IGenericDao.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DAO;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface IGenericDao<K, T extends Serializable> {
|
||||||
|
void create(final T entity);
|
||||||
|
T findById(final K id);
|
||||||
|
T update(final T entity);
|
||||||
|
void delete(final T entity);
|
||||||
|
void deleteById(final K id);
|
||||||
|
List<T> findAll();
|
||||||
|
T findOne(final K id);
|
||||||
|
}
|
||||||
10
src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java
Normal file
10
src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DAO;
|
||||||
|
|
||||||
|
import fr.istic.taa.jaxrs.metier.Question;
|
||||||
|
|
||||||
|
public class QuestionDAO extends AbstractJpaDao<Integer, Question> {
|
||||||
|
public QuestionDAO(){
|
||||||
|
super();
|
||||||
|
this.setClass(Question.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java
Normal file
18
src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DAO;
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityTransaction;
|
||||||
|
import fr.istic.taa.jaxrs.metier.Quizz;
|
||||||
|
|
||||||
|
public class QuizzDAO extends AbstractJpaDao<Integer, Quizz> {
|
||||||
|
public QuizzDAO(){
|
||||||
|
super();
|
||||||
|
this.setClass(Quizz.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteAllQuiz(){
|
||||||
|
EntityTransaction et= em.getTransaction();
|
||||||
|
et.begin();
|
||||||
|
em.createQuery("delete from Quizz").executeUpdate();
|
||||||
|
et.commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/main/java/fr/istic/taa/jaxrs/DAO/ReponseDAO.java
Normal file
19
src/main/java/fr/istic/taa/jaxrs/DAO/ReponseDAO.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DAO;
|
||||||
|
|
||||||
|
import fr.istic.taa.jaxrs.metier.Reponse;
|
||||||
|
|
||||||
|
public class ReponseDAO extends AbstractJpaDao<Integer, Reponse> {
|
||||||
|
public ReponseDAO(){
|
||||||
|
super();
|
||||||
|
this.setClass(Reponse.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public List<String> getGoodResponses(){
|
||||||
|
EntityTransaction t=em.getTransaction();
|
||||||
|
t.begin();
|
||||||
|
Query query=em.createQuery("select r from Reponse r where r.reponses");
|
||||||
|
List<String> lString=query.getResultList();
|
||||||
|
t.commit();
|
||||||
|
return lString;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
29
src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java
Normal file
29
src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DAO;
|
||||||
|
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityTransaction;
|
||||||
|
import jakarta.persistence.Query;
|
||||||
|
import fr.istic.taa.jaxrs.metier.Session;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SessionDAO extends AbstractJpaDao<Integer, Session> {
|
||||||
|
public SessionDAO() {
|
||||||
|
super();
|
||||||
|
this.setClass(Session.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Session> findByTheme(String theme){
|
||||||
|
EntityTransaction t=em.getTransaction();
|
||||||
|
t.begin();
|
||||||
|
Query query=em.createQuery("select s from Session s where s.theme=:theme");
|
||||||
|
query.setParameter("theme",theme);
|
||||||
|
List<Session> sessions=query.getResultList();
|
||||||
|
t.commit();
|
||||||
|
if(sessions.size()>0){
|
||||||
|
return sessions;
|
||||||
|
}else{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
37
src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java
Normal file
37
src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
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;
|
||||||
|
|
||||||
|
public class UtilisateurDAO extends AbstractJpaDao<Integer, Utilisateur> {
|
||||||
|
public UtilisateurDAO() {
|
||||||
|
super();
|
||||||
|
this.setClass(Utilisateur.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Utilisateur findByEmail(String email){
|
||||||
|
EntityTransaction t=em.getTransaction();
|
||||||
|
t.begin();
|
||||||
|
Query query=em.createQuery("select u from Utilisateur u where u.email=:email");
|
||||||
|
query.setParameter("email",email);
|
||||||
|
Utilisateur u=(Utilisateur)query.getSingleResult();
|
||||||
|
t.commit();
|
||||||
|
return u;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addToSession(int sessionId, int userId) {
|
||||||
|
EntityTransaction t = em.getTransaction();
|
||||||
|
t.begin();
|
||||||
|
Session s = em.find(Session.class, sessionId);
|
||||||
|
Utilisateur u = em.find(Utilisateur.class, userId);
|
||||||
|
|
||||||
|
//FAUT AJOUTER OWNING SIDE ( Ici u --> s)
|
||||||
|
u.getSession().add(s);
|
||||||
|
//Jsp il faut birectionnelle ou pas?
|
||||||
|
s.getUtilisateurs().add(u);
|
||||||
|
em.merge(u);
|
||||||
|
t.commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
13
src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java
Normal file
13
src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DTO;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class QuestionDTO {
|
||||||
|
private int id;
|
||||||
|
private String question;
|
||||||
|
private String reponse;
|
||||||
|
|
||||||
|
}
|
||||||
12
src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java
Normal file
12
src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DTO;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
|
||||||
|
public class QuizzDTO {
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
}
|
||||||
10
src/main/java/fr/istic/taa/jaxrs/DTO/ReponseDTO.java
Normal file
10
src/main/java/fr/istic/taa/jaxrs/DTO/ReponseDTO.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DTO;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
|
||||||
|
public class ReponseDTO {
|
||||||
|
}
|
||||||
10
src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java
Normal file
10
src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DTO;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
|
||||||
|
public class SessionDTO {
|
||||||
|
}
|
||||||
13
src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java
Normal file
13
src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package fr.istic.taa.jaxrs.DTO;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
|
||||||
|
public class UtilisateurDTO {
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
private String email;
|
||||||
|
}
|
||||||
32
src/main/java/fr/istic/taa/jaxrs/RestServer.java
Normal file
32
src/main/java/fr/istic/taa/jaxrs/RestServer.java
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package fr.istic.taa.jaxrs;
|
||||||
|
|
||||||
|
import io.undertow.Undertow;
|
||||||
|
import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer;
|
||||||
|
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RESTfull microservice, based on JAX-RS and JBoss Undertow
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class RestServer {
|
||||||
|
|
||||||
|
private static final Logger logger = Logger.getLogger(RestServer.class.getName());
|
||||||
|
|
||||||
|
public static void main( String[] args ) {
|
||||||
|
|
||||||
|
UndertowJaxrsServer ut = new UndertowJaxrsServer();
|
||||||
|
|
||||||
|
TestApplication ta = new TestApplication();
|
||||||
|
|
||||||
|
ut.deploy(ta);
|
||||||
|
|
||||||
|
ut.start(
|
||||||
|
Undertow.builder()
|
||||||
|
.addHttpListener(8080, "localhost")
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
logger.info("JAX-RS based micro-service running!");
|
||||||
|
}
|
||||||
|
}
|
||||||
44
src/main/java/fr/istic/taa/jaxrs/TestApplication.java
Normal file
44
src/main/java/fr/istic/taa/jaxrs/TestApplication.java
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/**
|
||||||
|
* JBoss, Home of Professional Open Source
|
||||||
|
* Copyright Red Hat, Inc., and individual contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package fr.istic.taa.jaxrs;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import fr.istic.taa.jaxrs.rest.PetResource;
|
||||||
|
import io.swagger.v3.jaxrs2.integration.resources.OpenApiResource;
|
||||||
|
import jakarta.ws.rs.ApplicationPath;
|
||||||
|
import jakarta.ws.rs.core.Application;
|
||||||
|
|
||||||
|
@ApplicationPath("/")
|
||||||
|
public class TestApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<Class<?>> getClasses() {
|
||||||
|
|
||||||
|
final Set<Class<?>> clazzes = new HashSet<Class<?>>();
|
||||||
|
|
||||||
|
clazzes.add(OpenApiResource.class);
|
||||||
|
clazzes.add(PetResource.class);
|
||||||
|
// clazzes.add(AcceptHeaderOpenApiResource.class);
|
||||||
|
|
||||||
|
|
||||||
|
return clazzes;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
44
src/main/java/fr/istic/taa/jaxrs/domain/Pet.java
Normal file
44
src/main/java/fr/istic/taa/jaxrs/domain/Pet.java
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package fr.istic.taa.jaxrs.domain;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.models.tags.Tag;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElementWrapper;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
@XmlRootElement(name = "Pet")
|
||||||
|
public class Pet {
|
||||||
|
private long id;
|
||||||
|
private String name;
|
||||||
|
private List<Tag> tags = new ArrayList<Tag>();
|
||||||
|
|
||||||
|
@XmlElement(name = "id")
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlElement(name = "name")
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlElementWrapper(name = "tags")
|
||||||
|
@XmlElement(name = "tag")
|
||||||
|
public List<Tag> getTags() {
|
||||||
|
return tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTags(List<Tag> tags) {
|
||||||
|
this.tags = tags;
|
||||||
|
}
|
||||||
|
}
|
||||||
28
src/main/java/fr/istic/taa/jaxrs/metier/Choix.java
Normal file
28
src/main/java/fr/istic/taa/jaxrs/metier/Choix.java
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package fr.istic.taa.jaxrs.metier;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumn;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@PrimaryKeyJoinColumn(name = "Choix_Id")
|
||||||
|
public class Choix extends Reponse{
|
||||||
|
List<String> choix;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String valHTML(){
|
||||||
|
String res = "";
|
||||||
|
|
||||||
|
for (String val : this.choix) {
|
||||||
|
res+=val+"<br/>";
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
27
src/main/java/fr/istic/taa/jaxrs/metier/Question.java
Normal file
27
src/main/java/fr/istic/taa/jaxrs/metier/Question.java
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package fr.istic.taa.jaxrs.metier;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Question implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private int id;
|
||||||
|
private String question;
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name ="bonne_reponse", referencedColumnName = "id")
|
||||||
|
private Reponse reponse;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name="id_quizz")
|
||||||
|
private Quizz quizz;
|
||||||
|
}
|
||||||
34
src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java
Normal file
34
src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package fr.istic.taa.jaxrs.metier;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Quizz implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
private Session session;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name="id_utilisateur")
|
||||||
|
private Utilisateur utilisateur;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "quizz")
|
||||||
|
private List<Question> questions=new ArrayList<Question>();
|
||||||
|
|
||||||
|
public void addQuestion(Question question) {
|
||||||
|
this.questions.add(question);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/main/java/fr/istic/taa/jaxrs/metier/Reponse.java
Normal file
30
src/main/java/fr/istic/taa/jaxrs/metier/Reponse.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package fr.istic.taa.jaxrs.metier;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Inheritance(strategy=InheritanceType.JOINED)
|
||||||
|
@DiscriminatorColumn(name="Type_reponse")
|
||||||
|
@DiscriminatorValue("Reponse")
|
||||||
|
public abstract class Reponse implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@OneToOne
|
||||||
|
private Question question;
|
||||||
|
public List<String> reponses;
|
||||||
|
|
||||||
|
public String valHTML(){
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
21
src/main/java/fr/istic/taa/jaxrs/metier/ReponseCourte.java
Normal file
21
src/main/java/fr/istic/taa/jaxrs/metier/ReponseCourte.java
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package fr.istic.taa.jaxrs.metier;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumn;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@PrimaryKeyJoinColumn(name = "RC_Id")
|
||||||
|
public class ReponseCourte extends Reponse{
|
||||||
|
String value;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String valHTML(){
|
||||||
|
return "INPUT";
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/main/java/fr/istic/taa/jaxrs/metier/Session.java
Normal file
29
src/main/java/fr/istic/taa/jaxrs/metier/Session.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package fr.istic.taa.jaxrs.metier;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Session implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@Column(unique=true)
|
||||||
|
private int codePIN;
|
||||||
|
@OneToMany(mappedBy="session")
|
||||||
|
private List<Quizz> quizzs = new ArrayList<>();
|
||||||
|
|
||||||
|
@ManyToMany(mappedBy = "session")
|
||||||
|
private List<Utilisateur> utilisateurs = new ArrayList<>();
|
||||||
|
private String theme;
|
||||||
|
}
|
||||||
33
src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java
Normal file
33
src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package fr.istic.taa.jaxrs.metier;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.*;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Utilisateur implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Column(unique=true)
|
||||||
|
private String email;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
@ManyToMany
|
||||||
|
@JoinTable(
|
||||||
|
name="utilisateur_session",
|
||||||
|
joinColumns = @JoinColumn(name="utilisateur_id"),
|
||||||
|
inverseJoinColumns = @JoinColumn(name = "session_id")
|
||||||
|
)
|
||||||
|
private List<Session> session= new ArrayList<>();;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "utilisateur")
|
||||||
|
private List<Quizz> quizzs;
|
||||||
|
}
|
||||||
38
src/main/java/fr/istic/taa/jaxrs/rest/PetResource.java
Normal file
38
src/main/java/fr/istic/taa/jaxrs/rest/PetResource.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package fr.istic.taa.jaxrs.rest;
|
||||||
|
|
||||||
|
import fr.istic.taa.jaxrs.domain.Pet;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import jakarta.ws.rs.Consumes;
|
||||||
|
import jakarta.ws.rs.GET;
|
||||||
|
import jakarta.ws.rs.POST;
|
||||||
|
import jakarta.ws.rs.Path;
|
||||||
|
import jakarta.ws.rs.PathParam;
|
||||||
|
import jakarta.ws.rs.Produces;
|
||||||
|
import jakarta.ws.rs.core.Response;
|
||||||
|
|
||||||
|
@Path("pet")
|
||||||
|
@Produces({"application/json", "application/xml"})
|
||||||
|
public class PetResource {
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{petId}")
|
||||||
|
public Pet getPetById(@PathParam("petId") Long petId) {
|
||||||
|
// return pet
|
||||||
|
return new Pet();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/")
|
||||||
|
public Pet getPet(Long petId) {
|
||||||
|
return new Pet();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Consumes("application/json")
|
||||||
|
public Response addPet(
|
||||||
|
@Parameter(description = "Pet object that needs to be added to the store", required = true) Pet pet) {
|
||||||
|
// add pet
|
||||||
|
return Response.ok().entity("SUCCESS").build();
|
||||||
|
}
|
||||||
|
}
|
||||||
67
src/main/resources/META-INF/persistence.xml
Normal file
67
src/main/resources/META-INF/persistence.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
|
||||||
|
version="3.0">
|
||||||
|
|
||||||
|
<persistence-unit name="dev" transaction-type="RESOURCE_LOCAL">
|
||||||
|
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||||
|
<properties>
|
||||||
|
<property name="jakarta.persistence.jdbc.driver"
|
||||||
|
value="org.hsqldb.jdbcDriver" />
|
||||||
|
<property name="jakarta.persistence.jdbc.url"
|
||||||
|
value="jdbc:hsqldb:hsql://localhost/" />
|
||||||
|
<property name="jakarta.persistence.jdbc.user" value="sa" />
|
||||||
|
<property name="jakarta.persistence.jdbc.password" value="" />
|
||||||
|
<property
|
||||||
|
name="jakarta.persistence.schema-generation.database.action"
|
||||||
|
value="create" />
|
||||||
|
<property name="jakarta.persistence.dialect"
|
||||||
|
value="org.hibernate.dialect.HSQLDialect" />
|
||||||
|
<property name="hibernate.show_sql" value="true" />
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
<persistence-unit name="prod" transaction-type="RESOURCE_LOCAL">
|
||||||
|
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||||
|
<properties>
|
||||||
|
<property name="jakarta.persistence.jdbc.driver"
|
||||||
|
value="org.hsqldb.jdbcDriver" />
|
||||||
|
<property name="jakarta.persistence.jdbc.url"
|
||||||
|
value="jdbc:hsqldb:hsql://localhost/" />
|
||||||
|
<property name="jakarta.persistence.jdbc.user" value="sa" />
|
||||||
|
<property name="jakarta.persistence.jdbc.password" value="" />
|
||||||
|
<property
|
||||||
|
name="jakarta.persistence.schema-generation.database.action"
|
||||||
|
value="update" />
|
||||||
|
<property name="jakarta.persistence.dialect"
|
||||||
|
value="org.hibernate.dialect.HSQLDialect" />
|
||||||
|
<property name="hibernate.show_sql" value="true" />
|
||||||
|
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
|
||||||
|
<persistence-unit name="mysql">
|
||||||
|
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<property name="jakarta.persistence.jdbc.driver"
|
||||||
|
value="com.mysql.cj.jdbc.Driver" />
|
||||||
|
<property name="jakarta.persistence.jdbc.url"
|
||||||
|
value="jdbc:mysql://localhost/mydatabase" />
|
||||||
|
<property name="jakarta.persistence.jdbc.user" value="tlc" />
|
||||||
|
<property name="jakarta.persistence.jdbc.password" value="tlc" />
|
||||||
|
<property
|
||||||
|
name="jakarta.persistence.schema-generation.database.action"
|
||||||
|
value="update" />
|
||||||
|
<property name="jakarta.persistence.dialect"
|
||||||
|
value="org.hibernate.dialect.MySQL8Dialect" />
|
||||||
|
<property name="hibernate.show_sql" value="true" />
|
||||||
|
<property name="hibernate.c3p0.min_size" value="5" />
|
||||||
|
<property name="hibernate.c3p0.max_size" value="20" />
|
||||||
|
<property name="hibernate.c3p0.timeout" value="300" />
|
||||||
|
<property name="hibernate.c3p0.max_statements" value="50" />
|
||||||
|
<property name="hibernate.c3p0.idle_test_period" value="3000" />
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
|
||||||
|
</persistence>
|
||||||
Reference in New Issue
Block a user