diff --git a/.idea/encodings.xml b/.idea/encodings.xml index d63dcda..9ca34f0 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -3,7 +3,11 @@ + + + + \ No newline at end of file diff --git a/MoviesCommon/src/main/java/at.technikumwien.movies/Actors.java b/MoviesCommon/src/main/java/at.technikumwien.movies/Actors.java index aa6d8e1..987113b 100644 --- a/MoviesCommon/src/main/java/at.technikumwien.movies/Actors.java +++ b/MoviesCommon/src/main/java/at.technikumwien.movies/Actors.java @@ -13,14 +13,20 @@ import java.time.LocalDate; @Entity @Table(name = "t_actors") -@NamedQuery( - name = "Actors.getIdByProperties", - query = "SELECT a.id FROM Actors a WHERE " + - "a.firstname LIKE :firstname AND " + - "a.lastname LIKE :lastname AND " + - "a.sex = :sex AND " + - "a.birthdate = :birthdate" -) +@NamedQueries({ + @NamedQuery( + name = "Actors.getIdByProperties", + query = "SELECT a FROM Actors a WHERE " + + "a.firstname LIKE :firstname AND " + + "a.lastname LIKE :lastname AND " + + "a.sex = :sex"// AND " + + //"a.birthdate = :birthdate" + ), + @NamedQuery( + name = "Actors.selectAllActors", + query = "SELECT n FROM Actors n" + ) +}) @XmlRootElement public class Actors { @Id diff --git a/MoviesCommon/src/main/java/at.technikumwien.movies/Movies.java b/MoviesCommon/src/main/java/at.technikumwien.movies/Movies.java index ab51c7b..5e392a2 100644 --- a/MoviesCommon/src/main/java/at.technikumwien.movies/Movies.java +++ b/MoviesCommon/src/main/java/at.technikumwien.movies/Movies.java @@ -15,14 +15,17 @@ import java.util.List; @Entity @Table(name = "t_movies") -@NamedQuery( - name = "Movies.selectAll", - query = "SELECT n FROM Movies n" -) -@NamedQuery( - name = "Movies.selectByTitle", - query = "SELECT n FROM Movies n WHERE n.title LIKE :title" -) +@NamedQueries({ + @NamedQuery( + name = "Movies.selectAll", + query = "SELECT n FROM Movies n" + ), + @NamedQuery( + name = "Movies.selectByTitle", + query = "SELECT n FROM Movies n WHERE n.title LIKE :title" + ) +}) + @XmlRootElement public class Movies { @Id diff --git a/MoviesCommon/src/main/java/at.technikumwien.movies/Studios.java b/MoviesCommon/src/main/java/at.technikumwien.movies/Studios.java index c8f1ecc..d69ec1f 100644 --- a/MoviesCommon/src/main/java/at.technikumwien.movies/Studios.java +++ b/MoviesCommon/src/main/java/at.technikumwien.movies/Studios.java @@ -13,6 +13,19 @@ import javax.xml.bind.annotation.XmlRootElement; @Entity @Table(name = "t_studios") @XmlRootElement +@NamedQueries({ + @NamedQuery( + name = "Studios.getIdByProperties", + query = "SELECT a FROM Studios a WHERE " + + "a.countrycode LIKE :countrycode AND " + + "a.name LIKE :name AND " + + "a.postcode LIKE :postcode" + ), + @NamedQuery( + name = "Studios.selectAllStudios", + query = "SELECT n FROM Studios n" + ) +}) public class Studios { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesService.java b/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesService.java index 212d173..a30cb06 100644 --- a/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesService.java +++ b/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesService.java @@ -5,11 +5,11 @@ import javax.ejb.*; import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; import javax.persistence.PersistenceContext; -import java.sql.ResultSet; import java.util.List; import java.util.logging.Logger; @Stateless +@TransactionManagement(value=TransactionManagementType.CONTAINER) public class MoviesService { private static final Logger LOGGER = Logger.getLogger(MoviesService.class.getName()); @@ -52,18 +52,77 @@ public class MoviesService { em.remove(movies); //managed news required } - public void save(Movies movies) { -// // TODO -// for (Actors actor : movies.getActors()) { -// ResultSet rs = em.createNamedQuery("Actors.getIdByParameters", Actors.class) -// .setParameter() // TODO -// .getResultList(); -// -// // Check if we have a result, if yes -> take first, actor.id = resultID -// // If no result: context.setRollbackOnly(); -// } - LOGGER.info("save() >> movies" + movies); + public List findAllActors() { + LOGGER.info("findAllActors)"); - em.merge(movies); + return em.createNamedQuery("Actors.selectAllActors", Actors.class) + .getResultList(); + } + + public List findAllStudios() { + LOGGER.info("findAllStudios)"); + + return em.createNamedQuery("Studios.selectAllStudios", Studios.class) + .getResultList(); + } + + // TODO maybe check if the movie already exists? + @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) + public void save(List movies) { + + for (Movies movie : movies) { + + try { + // Get studio for the movie from the database + Studios movieStudio = movie.getStudio(); + LOGGER.info("Get a studio" + movieStudio); + List studioListResult = em.createNamedQuery("Studios.getIdByProperties", Studios.class) + .setParameter("name", movieStudio.getName()) + .setParameter("countrycode", movieStudio.getCountrycode()) + .setParameter("postcode", movieStudio.getPostcode()) + .getResultList(); + + if (!studioListResult.isEmpty() && studioListResult.size() > 0) { + Long actorId = studioListResult.get(0).getId(); + movieStudio.setId(actorId); + } + else + { + LOGGER.info("Rollback! Movie studio: " + movieStudio); + context.setRollbackOnly(); + return; + } + + // TODO use also birthday + // Get actor for the movie from the database + for (Actors movieActor : movie.getActors()) { + LOGGER.info("Get an actor " + movieActor); + List actorListResult = em.createNamedQuery("Actors.getIdByProperties", Actors.class) + .setParameter("firstname", movieActor.getFirstname()) + .setParameter("lastname", movieActor.getLastname()) + .setParameter("sex", movieActor.getSex()) + //.setParameter("birthdate", movieActor.getBirthdate()) + .getResultList(); + + if (!actorListResult.isEmpty() && actorListResult.size() > 0) { + Long actorId = actorListResult.get(0).getId(); + movieActor.setId(actorId); + } + else + { + LOGGER.info("Rollback! Movie actor: " + movieActor); + context.setRollbackOnly(); + return; + } + } + } + catch (Exception e) { + e.printStackTrace(); + } + } + LOGGER.info("save() >> movies" + movies); + for (Movies movie : movies) { + em.merge(movie); + } } } \ No newline at end of file diff --git a/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesServlet.java b/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesServlet.java index 3b4ac13..7c72347 100644 --- a/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesServlet.java +++ b/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesServlet.java @@ -25,8 +25,8 @@ public class MoviesServlet extends HttpServlet { "" + "

Movies

"); - moviesService.findAll().forEach(news -> html.append("

" + news.getTitle() + "

" + - "

" + news.getTitle() + "

")); + moviesService.findAll().forEach(movies -> html.append("

" + movies.getTitle() + "

" + + "

" + movies.getActors() + "

")); html.append("" + ""); diff --git a/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesWebServiceImpl.java b/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesWebServiceImpl.java index f2cc611..7f4622f 100644 --- a/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesWebServiceImpl.java +++ b/MoviesWebApp/src/main/java/at/technikumwien/movies/MoviesWebServiceImpl.java @@ -28,8 +28,6 @@ public class MoviesWebServiceImpl implements MoviesWebService { @Override public void importMovies(List movies) { - for (Movies movie : movies) { - moviesService.save(movie); - } + moviesService.save(movies); } }