This commit is contained in:
karl 2019-11-29 14:21:43 +01:00
commit b271581278
7 changed files with 117 additions and 34 deletions

4
.idea/encodings.xml generated
View File

@ -3,7 +3,11 @@
<component name="Encoding"> <component name="Encoding">
<file url="file://$PROJECT_DIR$" charset="UTF-8" /> <file url="file://$PROJECT_DIR$" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/MoviesClient" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/MoviesClient" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/MoviesClient/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/MoviesCommon" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/MoviesCommon" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/MoviesCommon/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/MoviesWebApp" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/MoviesWebApp" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/MoviesWebApp/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/MoviesWebApp/src/main/resources" charset="UTF-8" />
</component> </component>
</project> </project>

View File

@ -13,14 +13,20 @@ import java.time.LocalDate;
@Entity @Entity
@Table(name = "t_actors") @Table(name = "t_actors")
@NamedQuery( @NamedQueries({
@NamedQuery(
name = "Actors.getIdByProperties", name = "Actors.getIdByProperties",
query = "SELECT a.id FROM Actors a WHERE " + query = "SELECT a FROM Actors a WHERE " +
"a.firstname LIKE :firstname AND " + "a.firstname LIKE :firstname AND " +
"a.lastname LIKE :lastname AND " + "a.lastname LIKE :lastname AND " +
"a.sex = :sex AND " + "a.sex = :sex"// AND " +
"a.birthdate = :birthdate" //"a.birthdate = :birthdate"
) ),
@NamedQuery(
name = "Actors.selectAllActors",
query = "SELECT n FROM Actors n"
)
})
@XmlRootElement @XmlRootElement
public class Actors { public class Actors {
@Id @Id

View File

@ -15,14 +15,17 @@ import java.util.List;
@Entity @Entity
@Table(name = "t_movies") @Table(name = "t_movies")
@NamedQuery( @NamedQueries({
@NamedQuery(
name = "Movies.selectAll", name = "Movies.selectAll",
query = "SELECT n FROM Movies n" query = "SELECT n FROM Movies n"
) ),
@NamedQuery( @NamedQuery(
name = "Movies.selectByTitle", name = "Movies.selectByTitle",
query = "SELECT n FROM Movies n WHERE n.title LIKE :title" query = "SELECT n FROM Movies n WHERE n.title LIKE :title"
) )
})
@XmlRootElement @XmlRootElement
public class Movies { public class Movies {
@Id @Id

View File

@ -13,6 +13,19 @@ import javax.xml.bind.annotation.XmlRootElement;
@Entity @Entity
@Table(name = "t_studios") @Table(name = "t_studios")
@XmlRootElement @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 { public class Studios {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)

View File

@ -5,11 +5,11 @@ import javax.ejb.*;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException; import javax.persistence.EntityNotFoundException;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import java.sql.ResultSet;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
@Stateless @Stateless
@TransactionManagement(value=TransactionManagementType.CONTAINER)
public class MoviesService { public class MoviesService {
private static final Logger LOGGER = Logger.getLogger(MoviesService.class.getName()); private static final Logger LOGGER = Logger.getLogger(MoviesService.class.getName());
@ -52,18 +52,77 @@ public class MoviesService {
em.remove(movies); //managed news required em.remove(movies); //managed news required
} }
public void save(Movies movies) { public List<Actors> findAllActors() {
// // TODO LOGGER.info("findAllActors)");
// 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);
em.merge(movies); return em.createNamedQuery("Actors.selectAllActors", Actors.class)
.getResultList();
}
public List<Studios> 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> 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<Studios> 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<Actors> 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);
}
} }
} }

View File

@ -25,8 +25,8 @@ public class MoviesServlet extends HttpServlet {
"<body>" + "<body>" +
"<h1>Movies</h1>"); "<h1>Movies</h1>");
moviesService.findAll().forEach(news -> html.append("<h2>" + news.getTitle() + "</h2>" + moviesService.findAll().forEach(movies -> html.append("<h2>" + movies.getTitle() + "</h2>" +
"<p>" + news.getTitle() + "</p>")); "<p>" + movies.getActors() + "</p>"));
html.append("</body>" + html.append("</body>" +
"</html>"); "</html>");

View File

@ -28,8 +28,6 @@ public class MoviesWebServiceImpl implements MoviesWebService {
@Override @Override
public void importMovies(List<Movies> movies) { public void importMovies(List<Movies> movies) {
for (Movies movie : movies) { moviesService.save(movies);
moviesService.save(movie);
}
} }
} }