| @ -0,0 +1,21 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <project version="4"> | |||
| <component name="CompilerConfiguration"> | |||
| <annotationProcessing> | |||
| <profile name="Maven default annotation processors profile" enabled="true"> | |||
| <sourceOutputDir name="target/generated-sources/annotations" /> | |||
| <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> | |||
| <outputRelativeToContentRoot value="true" /> | |||
| <module name="alejandro-prueba" /> | |||
| </profile> | |||
| </annotationProcessing> | |||
| <bytecodeTargetLevel> | |||
| <module name="alejandro-prueba" target="17" /> | |||
| </bytecodeTargetLevel> | |||
| </component> | |||
| <component name="JavacSettings"> | |||
| <option name="ADDITIONAL_OPTIONS_OVERRIDE"> | |||
| <module name="alejandro-prueba" options="-parameters" /> | |||
| </option> | |||
| </component> | |||
| </project> | |||
| @ -0,0 +1 @@ | |||
| dss | |||
| @ -0,0 +1,13 @@ | |||
| package com.example.demo; | |||
| import org.springframework.boot.SpringApplication; | |||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | |||
| /* Equivalente a : @Configuration + @EnableAutoConfiguration + @ComponentScan = @SpringBootApplication */ | |||
| @SpringBootApplication | |||
| public class DemoApplication { | |||
| public static void main(String[] args) { | |||
| SpringApplication.run(DemoApplication.class, args); | |||
| } | |||
| } | |||
| @ -0,0 +1,111 @@ | |||
| package com.example.demo; | |||
| import org.springframework.web.servlet.support.ServletUriComponentsBuilder; | |||
| import java.net.InetAddress; | |||
| import java.net.MalformedURLException; | |||
| import java.net.URL; | |||
| import java.net.UnknownHostException; | |||
| import static java.net.IDN.toASCII; | |||
| import static java.net.IDN.toUnicode; | |||
| public class Dominio { | |||
| String host; | |||
| String protocolo; | |||
| String dominio; | |||
| String tld; | |||
| int puerto; | |||
| String addr; | |||
| byte[] address; | |||
| String canonnical; | |||
| String hostname; | |||
| String url; | |||
| String path; | |||
| String error; | |||
| String query; | |||
| public Dominio() throws MalformedURLException { | |||
| final String currentURL = ServletUriComponentsBuilder.fromCurrentContextPath().build().toUriString(); | |||
| URL requestURL = new URL(currentURL); | |||
| this.puerto = requestURL.getPort(); | |||
| this.host = requestURL.getHost(); | |||
| this.protocolo = requestURL.getProtocol(); | |||
| this.path = requestURL.getPath(); | |||
| this.query = requestURL.getQuery(); | |||
| /* información del servidor */ | |||
| InetAddress iaddr=null; | |||
| String hostnameCanonical=null; | |||
| String hostname=null; | |||
| byte[] address=null; | |||
| try { | |||
| iaddr = InetAddress.getByName(InetAddress.getLocalHost().getHostName()); | |||
| this.addr = iaddr.toString(); | |||
| this.canonnical = iaddr.getCanonicalHostName(); | |||
| this.address = iaddr.getAddress(); | |||
| this.hostname = iaddr.getHostName(); | |||
| } catch (UnknownHostException e) { | |||
| this.error="UnknownHostException"; | |||
| } | |||
| this.url = currentURL; | |||
| //Eliminamos www si existen | |||
| this.url = url.replace("www.",""); | |||
| //Buscamos el primer . (http://eldominio.****** | |||
| int y=url.indexOf('.'); | |||
| if (y==-1) { | |||
| this.dominio= "sin-dominio"; | |||
| this.tld = "sin-tld"; | |||
| } | |||
| else { | |||
| this.dominio = toUnicode(url.substring(url.indexOf("://")+3,y)); | |||
| this.tld = url.substring(y).replace(":"+this.puerto,""); | |||
| } | |||
| } | |||
| public String getError() { | |||
| return error; | |||
| } | |||
| public String getAddr() { | |||
| return addr; | |||
| } | |||
| public byte[] getAddress() { | |||
| return address; | |||
| } | |||
| public String getCanonnical() { | |||
| return canonnical; | |||
| } | |||
| public String getHostname() { | |||
| return hostname; | |||
| } | |||
| public String getHost() { | |||
| return host; | |||
| } | |||
| public String getUrl() { | |||
| return url; | |||
| } | |||
| public String getPath() { | |||
| return path; | |||
| } | |||
| public String getQuery() { | |||
| return query; | |||
| } | |||
| public String getProtocolo() { | |||
| return protocolo; | |||
| } | |||
| public String getDominio() { | |||
| return dominio; | |||
| } | |||
| public String getTld() { | |||
| return tld; | |||
| } | |||
| public int getPuerto() { | |||
| return puerto; | |||
| } | |||
| } | |||
| @ -0,0 +1,46 @@ | |||
| package com.example.demo.controllers; | |||
| import com.example.demo.models.Empleado; | |||
| import com.example.demo.services.EmpleadoServicio; | |||
| 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; | |||
| @Controller | |||
| public class EmpleadoController { | |||
| @Autowired | |||
| private EmpleadoServicio servicio; | |||
| @GetMapping({"empleado/list"}) | |||
| public String listado (Model model) { | |||
| model.addAttribute("mensaje","Ramoncín esto es una prueba"); | |||
| model.addAttribute("dominio","dom.getDominio()"); | |||
| model.addAttribute("tld","dom.getTld()"); | |||
| model.addAttribute("pagina","list"); | |||
| model.addAttribute("listaEmpleados",servicio.findAll()); | |||
| return "index"; | |||
| } | |||
| @GetMapping({"empleado/alta"}) | |||
| public String alta (Model model) { | |||
| model.addAttribute("mensaje","Ramoncín esto es una prueba"); | |||
| model.addAttribute("dominio","dom.getDominio()"); | |||
| model.addAttribute("tld","dom.getTld()"); | |||
| model.addAttribute("empleadoForm", new Empleado()); | |||
| model.addAttribute("pagina","alta"); | |||
| return "index"; | |||
| } | |||
| @PostMapping("/empleado/new/submit") | |||
| public String nuevoEmpleadoSubmit(@ModelAttribute("empleadoForm") Empleado nuevoEmpleado) { | |||
| servicio.add(nuevoEmpleado); | |||
| return "redirect:/empleado/list"; | |||
| } | |||
| } | |||
| @ -0,0 +1,54 @@ | |||
| package com.example.demo.models; | |||
| import java.util.Objects; | |||
| public class Director { | |||
| private long id; | |||
| private String name; | |||
| public Director() {} | |||
| public Director(long id, String name) { | |||
| this.id = id; | |||
| this.name = name; | |||
| } | |||
| public long getId() { | |||
| return id; | |||
| } | |||
| public void setId(long id) { | |||
| this.id = id; | |||
| } | |||
| public String getName() { | |||
| return name; | |||
| } | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| @Override | |||
| public boolean equals(Object o) { | |||
| if (this == o) return true; | |||
| if (o == null || getClass() != o.getClass()) return false; | |||
| Director director = (Director) o; | |||
| return id == director.id && Objects.equals(name, director.name); | |||
| } | |||
| @Override | |||
| public int hashCode() { | |||
| return Objects.hash(id, name); | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return "Director{" + | |||
| "id=" + id + | |||
| ", name='" + name + '\'' + | |||
| '}'; | |||
| } | |||
| } | |||
| @ -0,0 +1,74 @@ | |||
| package com.example.demo.models; | |||
| import java.util.Objects; | |||
| public class Empleado { | |||
| private long id; | |||
| private String nombre; | |||
| private String email; | |||
| private String telefono; | |||
| public Empleado(){} | |||
| @Override | |||
| public boolean equals(Object o) { | |||
| if (this == o) return true; | |||
| if (o == null || getClass() != o.getClass()) return false; | |||
| Empleado empleado = (Empleado) o; | |||
| return getId() == empleado.getId() && getNombre().equals(empleado.getNombre()) && getEmail().equals(empleado.getEmail()) && getTelefono().equals(empleado.getTelefono()); | |||
| } | |||
| @Override | |||
| public int hashCode() { | |||
| return Objects.hash(getId(), getNombre(), getEmail(), getTelefono()); | |||
| } | |||
| public Empleado (long id, String nombre, String email, String telefono){ | |||
| this.id = id; | |||
| this.nombre = nombre; | |||
| this.email = email; | |||
| this.telefono = telefono; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return "Empleado{" + | |||
| "id=" + id + | |||
| ", nombre='" + nombre + '\'' + | |||
| ", email='" + email + '\'' + | |||
| ", telefono='" + telefono + '\'' + | |||
| '}'; | |||
| } | |||
| public long getId() { | |||
| return id; | |||
| } | |||
| public void setId(long id) { | |||
| this.id = id; | |||
| } | |||
| public String getNombre() { | |||
| return nombre; | |||
| } | |||
| public void setNombre(String nombre) { | |||
| this.nombre = nombre; | |||
| } | |||
| public String getEmail() { | |||
| return email; | |||
| } | |||
| public void setEmail(String email) { | |||
| this.email = email; | |||
| } | |||
| public String getTelefono() { | |||
| return telefono; | |||
| } | |||
| public void setTelefono(String telefono) { | |||
| this.telefono = telefono; | |||
| } | |||
| } | |||
| @ -0,0 +1,54 @@ | |||
| package com.example.demo.models; | |||
| import java.util.Objects; | |||
| public class Genre { | |||
| private long id; | |||
| private String name; | |||
| public Genre(){} | |||
| public Genre(long id, String name) { | |||
| this.id = id; | |||
| this.name = name; | |||
| } | |||
| public long getId() { | |||
| return id; | |||
| } | |||
| public void setId(long id) { | |||
| this.id = id; | |||
| } | |||
| public String getName() { | |||
| return name; | |||
| } | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| @Override | |||
| public boolean equals(Object o) { | |||
| if (this == o) return true; | |||
| if (o == null || getClass() != o.getClass()) return false; | |||
| Genre genre = (Genre) o; | |||
| return id == genre.id && Objects.equals(name, genre.name); | |||
| } | |||
| @Override | |||
| public int hashCode() { | |||
| return Objects.hash(id, name); | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return "Genre{" + | |||
| "id=" + id + | |||
| ", name='" + name + '\'' + | |||
| '}'; | |||
| } | |||
| } | |||
| @ -0,0 +1,36 @@ | |||
| package com.example.demo.services; | |||
| import com.example.demo.models.Empleado; | |||
| import org.springframework.stereotype.Service; | |||
| import javax.annotation.PostConstruct; | |||
| import java.util.ArrayList; | |||
| import java.util.Arrays; | |||
| import java.util.List; | |||
| @Service | |||
| public class EmpleadoServicio { | |||
| private List<Empleado> repositorio = new ArrayList<>(); | |||
| public EmpleadoServicio() { | |||
| } | |||
| public Empleado add(Empleado e){ | |||
| repositorio.add(e); | |||
| return e; | |||
| } | |||
| public List<Empleado> findAll() { | |||
| return repositorio; | |||
| } | |||
| @PostConstruct | |||
| public void init() { | |||
| repositorio.addAll( | |||
| Arrays.asList(new Empleado(1,"Juan","[email protected]","1111111111"), | |||
| new Empleado(2,"Perico","[email protected]","2222222222"), | |||
| new Empleado(3,"Andrés","[email protected]","3333333333")) | |||
| ); | |||
| } | |||
| } | |||
| @ -0,0 +1,10 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta charset="ISO-8859-1"> | |||
| <title>Insert title here</title> | |||
| </head> | |||
| <body> | |||
| hola 2 | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,10 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta charset="ISO-8859-1"> | |||
| <title>Insert title here</title> | |||
| </head> | |||
| <body> | |||
| hola | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,4 @@ | |||
| @charset "UTF-8"; | |||
| body { | |||
| background-color: white; | |||
| } | |||
| @ -0,0 +1,8 @@ | |||
| @charset "UTF-8"; | |||
| body { | |||
| padding-bottom: 20px; | |||
| } | |||
| .navbar { | |||
| margin-bottom: 20px; | |||
| } | |||
| @ -0,0 +1,42 @@ | |||
| <div th:fragment="alta" class="flex-shrink-0"> | |||
| <h1>Alta de empleados de la empresa</h1> | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="col-md-offset-2 col-md-8"> | |||
| <form method="post" action="#" th:action="${empleadoForm.id != 0} ? @{/empleado/edit/submit} : @{/empleado/new/submit}" | |||
| th:object="${empleadoForm}"> | |||
| <h1 th:text="${empleadoForm.id != 0} ? 'Editar empleado' : 'Nuevo empleado'">Nuevo empleado</h1> | |||
| <div class="form-group" | |||
| th:classappend="${#fields.hasErrors('id')} ? 'has-error'"> | |||
| <label for="id">ID</label> <input type="text" | |||
| class="form-control" id="id" placeholder="1" | |||
| th:field="*{id}" | |||
| th:attrappend="readonly=${empleadoForm.id != 0} ? 'readonly' : null"> | |||
| <span th:if="${#fields.hasErrors('id')}" th:errors="*{id}" | |||
| class="help-block" id="id-error">Errores</span> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label for="nombre">Nombre</label> <input type="text" | |||
| class="form-control" id="nombre" placeholder="Nombre" | |||
| th:field="*{nombre}" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label for="email">Email</label> | |||
| <input type="email" class="form-control" id="email" | |||
| placeholder="[email protected]" th:field="*{email}" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label for="telefono">Teléfono</label> <input type="tel" | |||
| class="form-control" id="telefono" placeholder="954000000" th:field="*{telefono}" /> | |||
| </div> | |||
| <button type="submit" class="btn btn-default">Enviar</button> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <!-- /.container --> | |||
| </div> | |||
| @ -0,0 +1,13 @@ | |||
| <!DOCTYPE html> | |||
| <html xmlns:th="http://www.thymeleaf.org"> | |||
| <head> | |||
| <title>Error page</title> | |||
| <meta charset="utf-8" /> | |||
| <link rel="stylesheet" href="css/main.css" th:href="@{/css/main.css}" /> | |||
| </head> | |||
| <body th:with="httpStatus=${T(org.springframework.http.HttpStatus).valueOf(#response.status)}"> | |||
| <h1 th:text="|${httpStatus} - ${httpStatus.reasonPhrase}|"> Ha habido un error... </h1> | |||
| <p th:utext="${errorMessage}">Error java.lang.NullPointerException</p> | |||
| <a href="index.html" th:href="@{/index.html}">Volver al inicio</a> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,60 @@ | |||
| <div th:fragment="main_footer" class="text-center text-lg-start bg-light text-muted"> | |||
| <style> | |||
| @media print { | |||
| @page { | |||
| margin: 0 0.8in; | |||
| } | |||
| } | |||
| </style> | |||
| <section> | |||
| <div class="container text-center text-md-start mt-5"> | |||
| <div class="row mt-3"> | |||
| <div class="col-md-3 col-lg-4 col-xl-3 mx-auto mb-4"> | |||
| <h6 class="text-uppercase fw-bold mb-4"> | |||
| <p style = "margin-top: 10%"> <i class="fas fa-gem me-3"> </i>La Filmoteca</p> | |||
| </h6> | |||
| <p style="text-align: justify" > | |||
| Acercamos de una manera intuitiva las mejores películas de la historia según nuestros expertos y las más | |||
| prestigiosas publicaciones de este arte. | |||
| </p> | |||
| </div> | |||
| <div class="col-md-4 col-lg-3 col-xl-3 mx-auto mb-md-0 mb-4"> | |||
| <h6 class="text-uppercase fw-bold mb-4" style = "margin-top: 10%">Contacta con nosotros</h6> | |||
| <p><i class="fas fa-home me-3"></i>Gata de Gorgos</p> | |||
| <p><i class="fas fa-envelope me-3"></i>[email protected]</p> | |||
| <p><i class="fas fa-phone me-3"></i> + 96 234 567 88</p> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| <div class="text-center p-4" style="background-color: rgba(0, 0, 0, 0.05); line-height: 90%;"> | |||
| <p> 2023 © <b>La Filmoteca</b> </p> | |||
| <p style = "font-size: smaller;"> Con la tecnologia de | |||
| <a href="https://mdbootstrap.com/"style="text-decoration: none; color: black"> MDBootstrap.com </a> </p> | |||
| <a type="button" class="btn btn-success mb-3" style="background-color: black;" id="crearpdf">Crear PDF</a> | |||
| </div> | |||
| <script> | |||
| document.addEventListener("DOMContentLoaded", () => { | |||
| let boton = document.getElementById("crearpdf"); | |||
| let container = document.getElementById("contenedor"); | |||
| boton.addEventListener("click", event => { | |||
| event.preventDefault(); | |||
| window.print(); | |||
| }, false); | |||
| container.addEventListener("click", event => { | |||
| boton.style.display = "initial"; | |||
| }, false); | |||
| }, false); | |||
| </script> | |||
| </div> | |||
| @ -0,0 +1,10 @@ | |||
| <head th:fragment="main_head"> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |||
| <title th:text="${dominio}">Título de la página</title> | |||
| <meta name="description" content=""> | |||
| <link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet"> | |||
| <link href="/webjars/font-awesome/css/all.css" rel="stylesheet"> | |||
| <link href="/css/estilo.css" rel="stylesheet"> | |||
| </head> | |||
| @ -0,0 +1,14 @@ | |||
| <!doctype html> | |||
| <html lang="es" xmlns:th="http://www.thymeleaf.org"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <link rel="stylesheet" type="text/css" media="all" | |||
| th:href="'/css/' + ${background} + '.css'"> | |||
| <title th:text="${fechahora}">Hora</title> | |||
| </head> | |||
| <body> | |||
| <h1>Hola thymeleaf hoy es ...</h1> | |||
| <h1 th:text="${fechahora}"> </h1> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,27 @@ | |||
| <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> | |||
| <html lang="es" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> | |||
| <head th:replace="head/head :: main_head"> | |||
| <title th:text="${title}">Título de la página</title> | |||
| </head> | |||
| <body onload="mueveReloj()"> | |||
| <header th:replace="header/nav :: main_menu"></header> | |||
| <div th:switch="${pagina}"> | |||
| <div th:case="list"> | |||
| <main th:replace="empleado/list :: listado"></main> | |||
| </div> | |||
| <div th:case="alta"> | |||
| <main th:replace="empleado/form :: alta"></main> | |||
| </div> | |||
| <div th:case="*"> | |||
| <main th:replace="main/main_content :: index"></main> | |||
| </div> | |||
| </div> | |||
| <footer th:replace="foot/footer :: main_footer"></footer> | |||
| <script src="/webjars/jsquery/jquery.min.js"></script> | |||
| <script src="/webjars/bootstrap/js/bootstrap.bundle.min.js"></script> | |||
| <script src="/js/reloj.js"></script> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,27 @@ | |||
| <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> | |||
| <html lang="es" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> | |||
| <head th:replace="head/head :: main_head"> | |||
| <title th:text="${title}">Título de la página</title> | |||
| </head> | |||
| <body onload="mueveReloj()"> | |||
| <header th:replace="header/nav/nav_header :: main_nav_header"></header> | |||
| <div th:switch="${pagina}"> | |||
| <div th:case="list"> | |||
| <main th:replace="empleado/list :: listado"></main> | |||
| </div> | |||
| <div th:case="alta"> | |||
| <main th:replace="empleado/form :: alta"></main> | |||
| </div> | |||
| <div th:case="*"> | |||
| <main th:replace="main/main_content :: escribir_resenya"></main> | |||
| </div> | |||
| </div> | |||
| <footer th:replace="foot/footer :: main_footer"></footer> | |||
| <script src="/webjars/jsquery/jquery.min.js"></script> | |||
| <script src="/webjars/bootstrap/js/bootstrap.bundle.min.js"></script> | |||
| <script src="/js/reloj.js"></script> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,10 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="UTF-8"> | |||
| <title>Title</title> | |||
| </head> | |||
| <body> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,27 @@ | |||
| <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> | |||
| <html lang="es" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> | |||
| <head th:replace="head/head :: main_head"> | |||
| <title th:text="${title}">Título de la página</title> | |||
| </head> | |||
| <body onload="mueveReloj()"> | |||
| <header th:replace="header/nav/nav_header :: main_nav_header"></header> | |||
| <div th:switch="${pagina}"> | |||
| <div th:case="list"> | |||
| <main th:replace="empleado/list :: listado"></main> | |||
| </div> | |||
| <div th:case="alta"> | |||
| <main th:replace="empleado/form :: alta"></main> | |||
| </div> | |||
| <div th:case="*"> | |||
| <main th:replace="main/main_content :: generos"></main> | |||
| </div> | |||
| </div> | |||
| <footer th:replace="foot/footer :: main_footer"></footer> | |||
| <script src="/webjars/jsquery/jquery.min.js"></script> | |||
| <script src="/webjars/bootstrap/js/bootstrap.bundle.min.js"></script> | |||
| <script src="/js/reloj.js"></script> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,13 @@ | |||
| package com.example.demo; | |||
| import org.junit.jupiter.api.Test; | |||
| import org.springframework.boot.test.context.SpringBootTest; | |||
| @SpringBootTest | |||
| class DemoApplicationTests { | |||
| @Test | |||
| void contextLoads() { | |||
| } | |||
| } | |||