diff --git a/MoviesWebApp/pom.xml b/MoviesWebApp/pom.xml index dcb498c..a8b2a4e 100644 --- a/MoviesWebApp/pom.xml +++ b/MoviesWebApp/pom.xml @@ -83,6 +83,22 @@ + + org.wildfly.plugins + wildfly-maven-plugin + 2.0.1.Final + + true + + + + install + + deploy + + + + org.apache.maven.plugins maven-compiler-plugin diff --git a/MoviesWebApp/src/main/java/at/technikumwien/movies/EntityNotFoundExceptionMapper.java b/MoviesWebApp/src/main/java/at/technikumwien/movies/EntityNotFoundExceptionMapper.java new file mode 100644 index 0000000..8b1a7ce --- /dev/null +++ b/MoviesWebApp/src/main/java/at/technikumwien/movies/EntityNotFoundExceptionMapper.java @@ -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 { + + @Override + public Response toResponse(EntityNotFoundException e) { + return Response.status(Response.Status.NOT_FOUND).build(); + } +} diff --git a/MoviesWebApp/src/main/java/at/technikumwien/movies/MovieResource.java b/MoviesWebApp/src/main/java/at/technikumwien/movies/MovieResource.java new file mode 100644 index 0000000..94d5ad0 --- /dev/null +++ b/MoviesWebApp/src/main/java/at/technikumwien/movies/MovieResource.java @@ -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 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 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)); + } +} diff --git a/MoviesWebApp/src/main/java/at/technikumwien/movies/MovieResourceApplication.java b/MoviesWebApp/src/main/java/at/technikumwien/movies/MovieResourceApplication.java new file mode 100644 index 0000000..93680b5 --- /dev/null +++ b/MoviesWebApp/src/main/java/at/technikumwien/movies/MovieResourceApplication.java @@ -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 { +} diff --git a/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesService.java b/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesService.java index e06df50..11bca87 100644 --- a/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesService.java +++ b/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesService.java @@ -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 movies) { + public List save(List 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 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; } } \ No newline at end of file