Setup Film model, manager and controller
Rest API with GET, POST, PUT, DELETE
This commit is contained in:
parent
e01953f0c8
commit
5d6642e696
8 changed files with 290 additions and 12 deletions
9
example.sql
Normal file
9
example.sql
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
create table FILM
|
||||||
|
(
|
||||||
|
id int auto_increment
|
||||||
|
primary key,
|
||||||
|
name varchar(248) not null,
|
||||||
|
description text not null,
|
||||||
|
date datetime not null,
|
||||||
|
duration float not null
|
||||||
|
);
|
36
pom.xml
36
pom.xml
|
@ -17,14 +17,15 @@
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
<maven.compiler.source>1.7</maven.compiler.source>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
<maven.compiler.target>1.7</maven.compiler.target>
|
||||||
<resteasy-version>3.0.10.Final</resteasy-version>
|
<resteasy-version>3.15.3.Final</resteasy-version>
|
||||||
|
<slf4j-version>1.7.36</slf4j-version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<version>4.11</version>
|
<version>4.13.2</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- JBoss -->
|
<!-- JBoss -->
|
||||||
|
@ -43,6 +44,37 @@
|
||||||
<artifactId>resteasy-multipart-provider</artifactId>
|
<artifactId>resteasy-multipart-provider</artifactId>
|
||||||
<version>${resteasy-version}</version>
|
<version>${resteasy-version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hibernate</groupId>
|
||||||
|
<artifactId>hibernate-core</artifactId>
|
||||||
|
<version>5.6.7.Final</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>${slf4j-version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-simple</artifactId>
|
||||||
|
<version>${slf4j-version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mariadb.jdbc</groupId>
|
||||||
|
<artifactId>mariadb-java-client</artifactId>
|
||||||
|
<version>3.0.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.22</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>2.9.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
package fr.univ.lyon1.iut;
|
package fr.univ.lyon1.iut.controllers;
|
||||||
|
|
||||||
import javax.ws.rs.*;
|
import javax.ws.rs.*;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.Response.Status;
|
import javax.ws.rs.core.Response.Status;
|
||||||
|
|
||||||
@Path("/api")
|
@Path("/admin")
|
||||||
public class Resource {
|
public class AdminController {
|
||||||
@GET
|
@GET
|
||||||
@Path("/isAlive")
|
@Path("/isAlive")
|
||||||
public Response isAlive() {
|
public Response isAlive() {
|
|
@ -0,0 +1,58 @@
|
||||||
|
package fr.univ.lyon1.iut.controllers;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import fr.univ.lyon1.iut.models.Film;
|
||||||
|
import fr.univ.lyon1.iut.models.ManageFilm;
|
||||||
|
|
||||||
|
import javax.ws.rs.*;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import javax.ws.rs.core.Request;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
@Path("/film")
|
||||||
|
public class FilmController {
|
||||||
|
@GET
|
||||||
|
@Path("/")
|
||||||
|
public Response getFilm() {
|
||||||
|
ManageFilm mf = new ManageFilm();
|
||||||
|
return Response.ok(new Gson().toJson(mf.getFilms()), MediaType.APPLICATION_JSON).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("/")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
public Response addFilm(Film f) {
|
||||||
|
f.setId(null);
|
||||||
|
try {
|
||||||
|
ManageFilm mf = new ManageFilm();
|
||||||
|
return Response.ok(mf.addFilm(f), MediaType.APPLICATION_JSON).build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return Response.serverError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Path("/")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
public Response updateFilm(Film f) {
|
||||||
|
try {
|
||||||
|
ManageFilm mf = new ManageFilm();
|
||||||
|
mf.updateFilm(f);
|
||||||
|
return Response.ok("ok").build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return Response.serverError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Path("/")
|
||||||
|
public Response deleteFilm(Film f) {
|
||||||
|
try {
|
||||||
|
ManageFilm mf = new ManageFilm();
|
||||||
|
mf.deleteFilm(f);
|
||||||
|
return Response.ok("ok").build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return Response.serverError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
52
src/main/java/fr/univ/lyon1/iut/models/Film.java
Normal file
52
src/main/java/fr/univ/lyon1/iut/models/Film.java
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
package fr.univ.lyon1.iut.models;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.hibernate.annotations.GenericGenerator;
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "FILM")
|
||||||
|
public class Film implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(generator = "increment")
|
||||||
|
@GenericGenerator(name="increment", strategy = "increment")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Column(name = "name")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Column(name = "description")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Column(name = "date")
|
||||||
|
@Temporal(TemporalType.TIMESTAMP)
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private Date date;
|
||||||
|
|
||||||
|
@Column(name = "duration")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private long duration;
|
||||||
|
|
||||||
|
public Film(String name, String description, Date date, long duration) {
|
||||||
|
this.name = name;
|
||||||
|
this.description = description;
|
||||||
|
this.date = date;
|
||||||
|
this.duration = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Film() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
102
src/main/java/fr/univ/lyon1/iut/models/ManageFilm.java
Normal file
102
src/main/java/fr/univ/lyon1/iut/models/ManageFilm.java
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
package fr.univ.lyon1.iut.models;
|
||||||
|
|
||||||
|
import org.hibernate.HibernateException;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.hibernate.Transaction;
|
||||||
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.service.ServiceRegistry;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ManageFilm {
|
||||||
|
private static SessionFactory sessionFactory;
|
||||||
|
|
||||||
|
public ManageFilm() {
|
||||||
|
try {
|
||||||
|
Configuration configuration = new Configuration();
|
||||||
|
configuration.configure();
|
||||||
|
configuration.addAnnotatedClass(Film.class);
|
||||||
|
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
|
||||||
|
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
|
||||||
|
} catch (Throwable th) {
|
||||||
|
System.err.println("Enitial SessionFactory creation failed" + th);
|
||||||
|
throw new ExceptionInInitializerError(th);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long addFilm(Film film) {
|
||||||
|
Session session = sessionFactory.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
Long filmID = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
filmID = (Long) session.save(film);
|
||||||
|
tx.commit();
|
||||||
|
} catch (HibernateException e) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return filmID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Film> getFilms() {
|
||||||
|
Session session = sessionFactory.openSession();
|
||||||
|
List<Film> films = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
films = session.createQuery("FROM Film", Film.class).list();
|
||||||
|
} catch (HibernateException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return films;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean updateFilm(Film film) {
|
||||||
|
Session session = sessionFactory.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
session.merge(film);
|
||||||
|
tx.commit();
|
||||||
|
result = true;
|
||||||
|
} catch (HibernateException e) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
e.printStackTrace();
|
||||||
|
result = false;
|
||||||
|
} finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean deleteFilm(Film film) {
|
||||||
|
Session session = sessionFactory.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
session.delete(film);
|
||||||
|
tx.commit();
|
||||||
|
result = true;
|
||||||
|
} catch (HibernateException e) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
e.printStackTrace();
|
||||||
|
result = false;
|
||||||
|
} finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
29
src/main/resources/hibernate.cfg.xml
Normal file
29
src/main/resources/hibernate.cfg.xml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version = "1.0" encoding = "utf-8"?>
|
||||||
|
<!DOCTYPE hibernate-configuration SYSTEM
|
||||||
|
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
|
||||||
|
<hibernate-configuration>
|
||||||
|
<session-factory>
|
||||||
|
|
||||||
|
<property name = "hibernate.dialect">
|
||||||
|
org.hibernate.dialect.MariaDBDialect
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name = "hibernate.connection.driver_class">
|
||||||
|
org.mariadb.jdbc.Driver
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<!-- Assume test is the database name -->
|
||||||
|
|
||||||
|
<property name = "hibernate.connection.url">
|
||||||
|
jdbc:mariadb://localhost:3306/filmflix
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name = "hibernate.connection.username">
|
||||||
|
filmflix
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name = "hibernate.connection.password">
|
||||||
|
filmflix
|
||||||
|
</property>
|
||||||
|
</session-factory>
|
||||||
|
</hibernate-configuration>
|
|
@ -3,17 +3,13 @@
|
||||||
"http://java.sun.com/dtd/web-app_2_3.dtd" >
|
"http://java.sun.com/dtd/web-app_2_3.dtd" >
|
||||||
<web-app>
|
<web-app>
|
||||||
<display-name>Archetype Created Web Application</display-name>
|
<display-name>Archetype Created Web Application</display-name>
|
||||||
<!--<context-param>
|
|
||||||
<param-name>resteasy.scan</param-name>
|
|
||||||
<param-value>true</param-value>
|
|
||||||
</context-param> -->
|
|
||||||
<context-param>
|
<context-param>
|
||||||
<param-name>resteasy.resources</param-name>
|
<param-name>resteasy.resources</param-name>
|
||||||
<param-value>fr.univ.lyon1.iut.Resource</param-value>
|
<param-value>fr.univ.lyon1.iut.controllers.AdminController,fr.univ.lyon1.iut.controllers.FilmController</param-value>
|
||||||
</context-param>
|
</context-param>
|
||||||
<context-param>
|
<context-param>
|
||||||
<param-name>resteasy.servlet.mapping.prefix</param-name>
|
<param-name>resteasy.servlet.mapping.prefix</param-name>
|
||||||
<param-value>/service</param-value>
|
<param-value>/api</param-value>
|
||||||
</context-param>
|
</context-param>
|
||||||
<listener>
|
<listener>
|
||||||
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
|
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
|
||||||
|
@ -24,6 +20,6 @@
|
||||||
</servlet>
|
</servlet>
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>api</servlet-name>
|
<servlet-name>api</servlet-name>
|
||||||
<url-pattern>/service/*</url-pattern>
|
<url-pattern>/api/*</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
</web-app>
|
</web-app>
|
||||||
|
|
Reference in a new issue