REST stuff

This commit is contained in:
karl 2019-12-02 11:45:01 +01:00
parent e6c45b4dbf
commit 7d5609f422
5 changed files with 119 additions and 4 deletions

View File

@ -83,6 +83,22 @@
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>2.0.1.Final</version>
<configuration>
<force>true</force>
</configuration>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>

View File

@ -0,0 +1,15 @@
package at.technikumwien.movies;
import javax.persistence.EntityNotFoundException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
@Provider
public class EntityNotFoundExceptionMapper implements ExceptionMapper<EntityNotFoundException> {
@Override
public Response toResponse(EntityNotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
}
}

View File

@ -0,0 +1,69 @@
package at.technikumwien.movies;
import javax.inject.Inject;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.util.List;
@Path("/movie")
public class MovieResource {
@Inject
private MoviesService moviesService;
@Context
private UriInfo uriInfo;
@GET
@Produces({
MediaType.APPLICATION_JSON,
MediaType.APPLICATION_XML
})
public List<Movie> retrieveAll() {
return moviesService.findAll();
}
@GET
@Produces({
MediaType.APPLICATION_JSON,
MediaType.APPLICATION_XML
})
@Path("/{id}")
public Movie retrieve(@PathParam("id") long id) {
return moviesService.findById(id);
}
@DELETE
@Path("/{id}")
public void delete(@PathParam("id") long id) {
moviesService.removeById(id);
}
@POST
@Consumes({
MediaType.APPLICATION_JSON,
MediaType.APPLICATION_XML
})
public Response create(Movie movie) {
movie.setId(null); // Make sure that a new movie is added, not overwriting existing one
List<Movie> newMovies = moviesService.save(List.of(movie));
URI location = uriInfo.getAbsolutePathBuilder().path(newMovies.get(0).getId().toString()).build();
return Response.created(location).build();
}
@PUT
@Consumes({
MediaType.APPLICATION_JSON,
MediaType.APPLICATION_XML
})
@Path("/{id}")
public void update(@PathParam("id") long id, Movie movie) {
movie.setId(id); // Make sure that a new movie is added, not overwriting existing one
moviesService.save(List.of(movie));
}
}

View File

@ -0,0 +1,8 @@
package at.technikumwien.movies;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/resources")
public class MovieResourceApplication extends Application {
}

View File

@ -5,6 +5,7 @@ import javax.ejb.*;
import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException;
import javax.persistence.PersistenceContext;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
@ -68,7 +69,7 @@ public class MoviesService {
// TODO maybe check if the movie already exists?
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void save(List<Movie> movies) {
public List<Movie> save(List<Movie> movies) {
try {
for (Movie movie : movies) {
@ -90,7 +91,7 @@ public class MoviesService {
{
LOGGER.info("Rollback! Movie studio: " + movieStudio);
context.setRollbackOnly();
return;
return null;
}
// Get actor for the movie from the database
@ -112,17 +113,23 @@ public class MoviesService {
{
LOGGER.info("Rollback! Movie actor: " + movieActor);
context.setRollbackOnly();
return;
return null;
}
}
}
List<Movie> addedMovies = new ArrayList<>();
LOGGER.info("save() >> movies" + movies);
for (Movie movieToImport : movies) {
em.merge(movieToImport);
addedMovies.add(em.merge(movieToImport));
}
return addedMovies;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}