Zum Inhalt springen

springboot.firststeps(P2)

Image description

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;
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert