peliculaController.java
package es.taw.movies.controller;
import es.taw.movies.dao.*;
import es.taw.movies.entity.MovieCast;
import es.taw.movies.entity.MovieCrew;
import es.taw.movies.entity.Movies;
import es.taw.movies.ui.Filtro;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@Controller
public class PeliculaController {
@Autowired
ProductionCompaniesRepository productionCompaniesRepository;
@Autowired
MoviesRepository moviesRepository;
@Autowired
SpokenLanguagesRepository spokenLanguagesRepository;
@Autowired
MovieCastRepository movieCastRepository;
@Autowired
MovieCrewRepository movieCrewRepository;
protected String listarConFiltro(Filtro filtro, Model model){
List<Movies> peliculas;
if(filtro== null || filtro.getProductoras().isEmpty()){
filtro = new Filtro();
peliculas = moviesRepository.findAll();
} else {
peliculas = moviesRepository.findByProductionCompaniesList(filtro.getProductoras());
}
model.addAttribute("peliculas", peliculas);
model.addAttribute("productoras", productionCompaniesRepository.findAll());
model.addAttribute("filtro", filtro);
return "peliculas";
}
@GetMapping("/")
public String doListar(Model model){
return listarConFiltro(null, model);
// model.addAttribute("productoras", productionCompaniesRepository.findAll());
// model.addAttribute("filtro", new Filtro());
// model.addAttribute("peliculas", moviesRepository.findAll());
//
// return "peliculas";
}
@PostMapping("/filtrar")
public String doFiltrar(Model model, @ModelAttribute("filtro")Filtro filtro){
return listarConFiltro(filtro, model);
// List<Movies> peliculas;
// if(!filtro.getProductoras().isEmpty()){
// peliculas = moviesRepository.findByProductionCompaniesList(filtro.getProductoras());
// }else {
// peliculas = moviesRepository.findAll();
// }
//
// model.addAttribute("peliculas", peliculas);
// model.addAttribute("productoras", productionCompaniesRepository.findAll());
// model.addAttribute("filtro", filtro);
// return "peliculas";
}
@GetMapping("/editar")
public String doEditar(@RequestParam("id")Integer id, Model model){
Movies pelicula = moviesRepository.findById(id).orElse(null);
model.addAttribute("pelicula", pelicula);
model.addAttribute("idiomas", spokenLanguagesRepository.findAll());
return "pelicula";
}
@PostMapping("/guardar")
public String doGuardar(Model model, @ModelAttribute("pelicula")Movies pelicula){
Movies peliculaEdit = moviesRepository.findById(pelicula.getId()).orElse(null);
peliculaEdit.setTitle(pelicula.getTitle());
peliculaEdit.setReleaseDate(pelicula.getReleaseDate());
peliculaEdit.setSpokenLanguagesList(pelicula.getSpokenLanguagesList());
peliculaEdit.setOverview(pelicula.getOverview());
moviesRepository.save(peliculaEdit);
return "redirect:/";
}
@GetMapping("/reparto")
public String doReparto(@RequestParam("id")Integer id, Model model){
Movies pelicula = moviesRepository.findById(id).orElse(null);
List<MovieCast> reparto = movieCastRepository.findByPeliculaId(id);
model.addAttribute("reparto", reparto);
model.addAttribute("pelicula", pelicula);
model.addAttribute("idiomas", spokenLanguagesRepository.findAll());
return "pelicula";
}
@GetMapping("/trabajadores")
public String doTrabajos(@RequestParam("id")Integer id, Model model){
Movies pelicula = moviesRepository.findById(id).orElse(null);
List<MovieCrew> trabajos = movieCrewRepository.findByPeliculaId(id);
model.addAttribute("trabajos", trabajos);
model.addAttribute("pelicula", pelicula);
model.addAttribute("idiomas", spokenLanguagesRepository.findAll());
return "pelicula";
}
}
Vista
pelicula.jsp
<%@ page import="es.taw.movies.entity.Movies" %>
<%@ page import="java.util.List" %>
<%@ page import="es.taw.movies.entity.MovieCast" %>
<%@ page import="es.taw.movies.entity.MovieCrew" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<%
String title = "Ficha de la Película";
Movies pelicula = (Movies) request.getAttribute("pelicula");
%>
<head>
<title><%=title%></title>
</head>
<body>
<h1><%=title%></h1>
<table border="1">
<tr>
<td>
<form:form modelAttribute="pelicula" method="post" action="/guardar">
<table>
<form:hidden path="id"/>
<tr>
<td>Título:</td>
<td><form:input path="title"/></td>
</tr>
<tr>
<td>Fecha:</td>
<td><form:input path="releaseDate"/></td>
</tr>
<tr>
<td>Idiomas:</td>
<td><form:checkboxes path="spokenLanguagesList" items="${idiomas}" itemLabel="name"/></td>
</tr>
<tr>
<td>Sinopsis:</td>
<td><form:textarea path="overview" cols="100" rows="5"/></td>
</tr>
</table>
<form:button>Guardar</form:button>
</form:form>
</td>
<td>
<a href="/reparto?id=<%=pelicula.getId()%>" >Reparto</a> -
<a href="/trabajadores?id=<%=pelicula.getId()%>" >Trabajadores</a> <br>
<%
List<MovieCast> reparto = (List<MovieCast>) request.getAttribute("reparto");
List<MovieCrew> trabajos = (List<MovieCrew>) request.getAttribute("trabajos");
if(reparto!=null){
%>
<h1>Reparto</h1> <br>
<%
for (MovieCast r : reparto){
%>
<%=r.getCharacterName()%> - <%=r.getPersonId().getName()%> <br>
<%
}
} else if (trabajos!=null) {
%>
<h1>Trabajadores</h1> <br>
<%
for (MovieCrew t : trabajos){
%>
<%=t.getJob()%> - <%=t.getPersonId().getName()%> <br>
<%
}
}
%>
</td>
</tr>
</table>
</body>
</html>
peliculas.jsp
<%@ page import="es.taw.movies.entity.Movies" %>
<%@ page import="java.util.List" %>
<%@ page import="es.taw.movies.entity.SpokenLanguages" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<%
String title = "Peliculas";
List<Movies> peliculas = (List<Movies>) request.getAttribute("peliculas");
%>
<head>
<title><%=title%></title>
</head>
<body>
<h1><%=title%></h1>
<form:form modelAttribute="filtro" method="post" action="/filtrar">
<table border="1">
<tr>
<th>PRODUCTORAS</th>
<th>PELÍCULAS</th>
</tr>
<tr>
<td>
<form:checkboxes path="productoras" items="${productoras}" itemLabel="name" delimiter="<br>"/>
</td>
<td>
<%
for(Movies p : peliculas){
%>
<a href="/editar?id=<%=p.getId()%>"> <%=p.getTitle()%> </a> - (
<%
for(SpokenLanguages s : p.getSpokenLanguagesList()){
%>
<%=s.getName()%>
<%
}
%>
)<br>
<%
}
%>
</td>
</tr>
</table>
<form:button>Filtrar</form:button>
</form:form>
</body>
</html>
Repos
buscar una lista en una lista
package es.taw.movies.dao;
import es.taw.movies.entity.Movies;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface MoviesRepository extends JpaRepository<Movies, Integer> {
@Query("select m from Movies m join m.productionCompaniesList p where p.id in :productoras")
public List<Movies> findByProductionCompaniesList(@Param("productoras")List<Integer> productoras);
}
public interface MovieCrewRepository extends JpaRepository<MovieCrew, Integer> {
@Query("select crew from MovieCrew crew where crew.movieId.id = :id")
public List<MovieCrew> findByPeliculaId(@Param("id")Integer id);
}
ui(Filtro)
package es.taw.movies.ui;
import lombok.Data;
import java.util.List;
@Data
public class Filtro {
List<Integer> productoras;
}