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">
<file url="file://$PROJECT_DIR$" 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/src/main/java" 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>
</project>

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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<Actors> findAllActors() {
LOGGER.info("findAllActors)");
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>" +
"<h1>Movies</h1>");
moviesService.findAll().forEach(news -> html.append("<h2>" + news.getTitle() + "</h2>" +
"<p>" + news.getTitle() + "</p>"));
moviesService.findAll().forEach(movies -> html.append("<h2>" + movies.getTitle() + "</h2>" +
"<p>" + movies.getActors() + "</p>"));
html.append("</body>" +
"</html>");

View File

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