@ -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() { | |||||
} | |||||
} |