diff --git a/.classpath b/.classpath index 4505026..c531bd5 100644 --- a/.classpath +++ b/.classpath @@ -24,11 +24,7 @@ - - - - - + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index ac8e750..6de7763 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,9 +1,16 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.processAnnotations=disabled -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/pom.xml b/pom.xml index bd35b7c..7b51679 100644 --- a/pom.xml +++ b/pom.xml @@ -1,8 +1,22 @@ - - 4.0.0 - com.antoniofrische - perifericosAdvisor - 0.0.1-SNAPSHOT - PerifericosAdvisor - una recomandacion de diferentes perifericos + + 4.0.0 + com.openwebinars + 19-MovieAdvisor + 0.0.1-SNAPSHOT + 19-MovieAdvisor + Ejemplo que integra todos los conocimientos del curso de Spring. + + + org.springframework + spring-context + 5.0.8.RELEASE + + + + 1.8 + 1.8 + + \ No newline at end of file diff --git a/src/main/java/com/antoniofrische/perifericosAdvisor/config/AppConfig.java b/src/main/java/com/antoniofrische/perifericosAdvisor/config/AppConfig.java new file mode 100644 index 0000000..65f389a --- /dev/null +++ b/src/main/java/com/antoniofrische/perifericosAdvisor/config/AppConfig.java @@ -0,0 +1,36 @@ +package com.antoniofrische.perifericosAdvisor.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + + + +@Configuration +@ComponentScan(basePackages="com.antoniofrische.perifericosAdvisor") +@PropertySource("classpath:/movieadvisor.properties") +public class AppConfig { + + @Value("${file.path}") + public String file; + + @Value("${file.csv.separator}") + public String separator; + + @Value("${file.csv.list_separator}") + public String listSeparator; + + public String getFile() { + return file; + } + + public String getSeparator() { + return separator; + } + + public String getListSeparator() { + return listSeparator; + } + +} diff --git a/src/main/java/com/antoniofrische/perifericosAdvisor/dao/PerifericoDao.java b/src/main/java/com/antoniofrische/perifericosAdvisor/dao/PerifericoDao.java new file mode 100644 index 0000000..44b8781 --- /dev/null +++ b/src/main/java/com/antoniofrische/perifericosAdvisor/dao/PerifericoDao.java @@ -0,0 +1,15 @@ +package com.antoniofrische.perifericosAdvisor.dao; + +import java.util.Collection; + +import com.antoniofrische.perifericosAdvisor.model.Periferico; + +public interface PerifericoDao { + + public Periferico findById(long id); + public Collection findAll(); + public void insert(Periferico periferico); + public void edit(Periferico periferico); + public void delete(long id); + +} diff --git a/src/main/java/com/antoniofrische/perifericosAdvisor/dao/PerifericoDaoImplMemory.java b/src/main/java/com/antoniofrische/perifericosAdvisor/dao/PerifericoDaoImplMemory.java new file mode 100644 index 0000000..dc5dabc --- /dev/null +++ b/src/main/java/com/antoniofrische/perifericosAdvisor/dao/PerifericoDaoImplMemory.java @@ -0,0 +1,75 @@ +package com.antoniofrische.perifericosAdvisor.dao; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import com.antoniofrische.perifericosAdvisor.config.AppConfig; +import com.antoniofrische.perifericosAdvisor.model.Periferico; + +@Repository +public class PerifericoDaoImplMemory implements PerifericoDao { + + public List perifericos = new ArrayList(); + + @Autowired + private AppConfig appConfig; + + @PostConstruct + public void init() { + perifericos = UtilPerifericoFileReader.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator()); + } + + public Periferico findById(long id) { + + Optional result = perifericos + .stream() + .filter(f -> f.getId() == id) + .findFirst(); + return result.orElse(null); + + + } + + public Collection findAll() { + return perifericos; + } + + public void insert(Periferico periferico) { + perifericos.add(periferico); + } + + public void edit(Periferico periferico) { + int index = getIndexOf(periferico.getId()); + if (index != -1) + perifericos.set(index, periferico); + } + + public void delete(long id) { + int index = getIndexOf(id); + if (index != -1) + perifericos.remove(index); + + } + + private int getIndexOf(long id) { + boolean encontrado = false; + int index = 0; + + while (!encontrado && index < perifericos.size()) { + if (perifericos.get(index).getId() == id) + encontrado = true; + else + index++; + } + + return (encontrado) ? index : -1; + } + +} diff --git a/src/main/java/com/antoniofrische/perifericosAdvisor/dao/UtilPerifericoFileReader.java b/src/main/java/com/antoniofrische/perifericosAdvisor/dao/UtilPerifericoFileReader.java new file mode 100644 index 0000000..baf4355 --- /dev/null +++ b/src/main/java/com/antoniofrische/perifericosAdvisor/dao/UtilPerifericoFileReader.java @@ -0,0 +1,40 @@ +package com.antoniofrische.perifericosAdvisor.dao; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.util.ResourceUtils; + +import com.antoniofrische.perifericosAdvisor.model.Periferico; + + +public class UtilPerifericoFileReader { + + public static List readFile(final String path, final String separator, final String listSeparator) { + + List result = new ArrayList<>(); + + + try { + + result = Files + .lines(Paths.get(ResourceUtils.getFile(path).toURI())) + .skip(1) + .map(line -> { + String[] values = line.split(separator); + return new Perifericos(Long.parseLong(values[0]), values[1], values[2],values[3],values[4],values[5],Boolean.parseBoolean(values[6])); + }).collect(Collectors.toList()); + } catch (Exception e) { + System.err.println("Error de lectura del fichero de datos: imdb_data"); + System.exit(-1); + } + + return result; + + } + +} diff --git a/src/main/java/com/antoniofrische/perifericosAdvisor/model/Periferico.java b/src/main/java/com/antoniofrische/perifericosAdvisor/model/Periferico.java new file mode 100644 index 0000000..7a2c721 --- /dev/null +++ b/src/main/java/com/antoniofrische/perifericosAdvisor/model/Periferico.java @@ -0,0 +1,113 @@ +package com.antoniofrische.perifericosAdvisor.model; + +public class Periferico { + private int id; + private String marca; + private String nombre; + private String descripcion; + private String tipo; + private String color; + private boolean ifcable; + + public Periferico(int id, String marca, String nombre, String descripcion, String tipo, String color,boolean ifcable) { + this.id = id; + this.marca = marca; + this.nombre = nombre; + this.descripcion = descripcion; + this.tipo = tipo; + this.color = color; + this.ifcable = ifcable; + } + + public int getId() { + return id; + } + + public String getMarca() { + return marca; + } + + public String getNombre() { + return nombre; + } + + public String getDescripcion() { + return descripcion; + } + + public String getTipo() { + return tipo; + } + + public String getColor() { + return color; + } + + public boolean isIfcable() { + return ifcable; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((color == null) ? 0 : color.hashCode()); + result = prime * result + ((descripcion == null) ? 0 : descripcion.hashCode()); + result = prime * result + id; + result = prime * result + (ifcable ? 1231 : 1237); + result = prime * result + ((marca == null) ? 0 : marca.hashCode()); + result = prime * result + ((nombre == null) ? 0 : nombre.hashCode()); + result = prime * result + ((tipo == null) ? 0 : tipo.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Periferico other = (Periferico) obj; + if (color == null) { + if (other.color != null) + return false; + } else if (!color.equals(other.color)) + return false; + if (descripcion == null) { + if (other.descripcion != null) + return false; + } else if (!descripcion.equals(other.descripcion)) + return false; + if (id != other.id) + return false; + if (ifcable != other.ifcable) + return false; + if (marca == null) { + if (other.marca != null) + return false; + } else if (!marca.equals(other.marca)) + return false; + if (nombre == null) { + if (other.nombre != null) + return false; + } else if (!nombre.equals(other.nombre)) + return false; + if (tipo == null) { + if (other.tipo != null) + return false; + } else if (!tipo.equals(other.tipo)) + return false; + return true; + } + + @Override + public String toString() { + return "perifericos [id=" + id + ", marca=" + marca + ", nombre=" + nombre + ", descripcion=" + descripcion + + ", tipo=" + tipo + ", color=" + color + ", ifcable=" + ifcable + "]"; + } + + + +} diff --git a/src/main/resources/ayuda.txt b/src/main/resources/ayuda.txt new file mode 100644 index 0000000..9dbef7f --- /dev/null +++ b/src/main/resources/ayuda.txt @@ -0,0 +1,52 @@ +Sintaxis: java -jar movieadvisor.jar [OPCIONES] + + -lg + Lista los diferentes géneros de películas de la colección. + No se pueden utilizar más parámetros. + + -ag genero1,genero2,genero... + Lista aquellas películas que pertenecen a al menos uno de los géneros + que se indican. El listado de géneros no puede incluir espacios. + + -tg genero1,genero2,genero... + Lista aquellas películas que pertenecen a todos y cada uno de los + géneros que se indican. El listado de géneros no puede incluir espacios. + + -y año + Lista aquellas películas que se estrenaron en el año indicado. + El año debe expresarse con 4 cifras. + + -b desde,hasta + Lista aquellas películas que se estrenaron entre los años DESDE y HASTA. + Los años indicados están incluidos. Deben expresarse con 4 cifras. + + -t titulo + Lista aquellas películas cuyo título contiene la cadena proporcionada. + Se ignorará el uso de mayúsculas/minúsculas en la comparación. + + -h + Muestra este mensaje de ayuda. + +EJEMPLOS DE USO + +java -jar movieadvisor.jar -y 2018 -ag Action,Comedy +Muestra las películas estrenadas de 2018 de acción y/o de comedia. + +java -jar movieadvisor.jar -t heart +Muestra las películas cuyo título contiene la palabra heart. + +java -jar movieadvisor.jar -td Action,Sci-Fi -b 1990,2010 -t star +Muestra las películas cuyo título contiene la palabra star, pertenecen al +género de acción y ciencia ficción y fueron estrenadas entre 1990 y 2010. + +java -jar movieadvisor.jar -lg +Muestra un listado con todos los géneros. + + +LICENCIAS + +Los datos utilizados sobre películas utilizados en este ejemplo son +reales y están sacados del sitio web www.imdb.com. Ten en cuenta +que solo puede ser usada con fines personales y no comerciales. + + \ No newline at end of file diff --git a/src/main/resources/imdb_data.csv b/src/main/resources/imdb_data.csv new file mode 100644 index 0000000..cff3b6c --- /dev/null +++ b/src/main/resources/imdb_data.csv @@ -0,0 +1,16 @@ +id;marca;nombre;descripcion;tipo;color;cable +30;Razer;Pro gamingX;Raton de alta calidad;raton,negro y blanco;true +32;Roccat;Kone Aimo;Raton con alta DPI;raton,Blanco;true +33;Logitech;G930;Volante para videojuegos;Volante,negro y azul;true +40;HyperX;gamingTX;Altavozes para juagar;altavozes,negro y gris;true +12;Razer;Fly pro gaming;Raton mas ligero del mercado;raton,Rojo;false +23;HyperX;Pro XDR 2;Pantalla con colores reales;Pantalla,negro;true +51;MarsGaming;Alfombria MG18;alfombria para la mejor presicion en los jeugos;Alfombria,rojo y blanco;false +46;Roccat;Khan aimo;cascos confortables para horas de juego;Cascos,negro;true +90;HyperX;Hiper gaming H15;Teclado para quien quiere montar se lo mismo;teclado,rojo;true +37;HyperX;Alloy Core RGB;Teclado a mejor precio;teclado,negro y verde;true +18;Razer;titanium GPU;Suporte para aguantar tajetas graficas;suporte,negro metallico;true +02;Logitech;G815 lightspeed;Teclado de alta calidad con bluetooth;teclado,blanco;false +11;MarsGaming;MG318 bulletproof;cascos speciales para ambientes ruidosos;cascos,blanco;true +66;Razer;Enki;silla confortable para gaming;silla,negro y gris;false +91;Logitech;lightspeed pro 10;Raton inalambrico para llevar;raton,gris;false diff --git a/src/main/resources/perifericoadvisor.properties b/src/main/resources/perifericoadvisor.properties new file mode 100644 index 0000000..99a01f1 --- /dev/null +++ b/src/main/resources/perifericoadvisor.properties @@ -0,0 +1,3 @@ +file.path=classpath:imdb_data.csv +file.csv.separator=; +file.csv.list_separator=, \ No newline at end of file diff --git a/target/classes/META-INF/maven/com.antoniofrische/perifericosAdvisor/pom.xml b/target/classes/META-INF/maven/com.antoniofrische/perifericosAdvisor/pom.xml deleted file mode 100644 index bd35b7c..0000000 --- a/target/classes/META-INF/maven/com.antoniofrische/perifericosAdvisor/pom.xml +++ /dev/null @@ -1,8 +0,0 @@ - - 4.0.0 - com.antoniofrische - perifericosAdvisor - 0.0.1-SNAPSHOT - PerifericosAdvisor - una recomandacion de diferentes perifericos - \ No newline at end of file diff --git a/target/classes/META-INF/maven/com.antoniofrische/perifericosAdvisor/pom.properties b/target/classes/META-INF/maven/com.openwebinars/19-MovieAdvisor/pom.properties similarity index 75% rename from target/classes/META-INF/maven/com.antoniofrische/perifericosAdvisor/pom.properties rename to target/classes/META-INF/maven/com.openwebinars/19-MovieAdvisor/pom.properties index 1a6e830..fc391a9 100644 --- a/target/classes/META-INF/maven/com.antoniofrische/perifericosAdvisor/pom.properties +++ b/target/classes/META-INF/maven/com.openwebinars/19-MovieAdvisor/pom.properties @@ -1,7 +1,7 @@ #Generated by Maven Integration for Eclipse -#Sat Nov 26 10:36:42 CET 2022 +#Sat Nov 26 11:46:12 CET 2022 m2e.projectLocation=C\:\\Users\\AntonioFrische\\OneDrive - ABACCO Solutions\\Documents\\Schule_22_23_CFGS\\Acceso_Datos\\SpringTool_4\\SpringWorkspace\\perifericosAdvisor m2e.projectName=perifericosAdvisor -groupId=com.antoniofrische -artifactId=perifericosAdvisor +groupId=com.openwebinars +artifactId=19-MovieAdvisor version=0.0.1-SNAPSHOT diff --git a/target/classes/META-INF/maven/com.openwebinars/19-MovieAdvisor/pom.xml b/target/classes/META-INF/maven/com.openwebinars/19-MovieAdvisor/pom.xml new file mode 100644 index 0000000..7b51679 --- /dev/null +++ b/target/classes/META-INF/maven/com.openwebinars/19-MovieAdvisor/pom.xml @@ -0,0 +1,22 @@ + + 4.0.0 + com.openwebinars + 19-MovieAdvisor + 0.0.1-SNAPSHOT + 19-MovieAdvisor + Ejemplo que integra todos los conocimientos del curso de Spring. + + + org.springframework + spring-context + 5.0.8.RELEASE + + + + 1.8 + 1.8 + + + \ No newline at end of file diff --git a/target/classes/ayuda.txt b/target/classes/ayuda.txt new file mode 100644 index 0000000..9dbef7f --- /dev/null +++ b/target/classes/ayuda.txt @@ -0,0 +1,52 @@ +Sintaxis: java -jar movieadvisor.jar [OPCIONES] + + -lg + Lista los diferentes géneros de películas de la colección. + No se pueden utilizar más parámetros. + + -ag genero1,genero2,genero... + Lista aquellas películas que pertenecen a al menos uno de los géneros + que se indican. El listado de géneros no puede incluir espacios. + + -tg genero1,genero2,genero... + Lista aquellas películas que pertenecen a todos y cada uno de los + géneros que se indican. El listado de géneros no puede incluir espacios. + + -y año + Lista aquellas películas que se estrenaron en el año indicado. + El año debe expresarse con 4 cifras. + + -b desde,hasta + Lista aquellas películas que se estrenaron entre los años DESDE y HASTA. + Los años indicados están incluidos. Deben expresarse con 4 cifras. + + -t titulo + Lista aquellas películas cuyo título contiene la cadena proporcionada. + Se ignorará el uso de mayúsculas/minúsculas en la comparación. + + -h + Muestra este mensaje de ayuda. + +EJEMPLOS DE USO + +java -jar movieadvisor.jar -y 2018 -ag Action,Comedy +Muestra las películas estrenadas de 2018 de acción y/o de comedia. + +java -jar movieadvisor.jar -t heart +Muestra las películas cuyo título contiene la palabra heart. + +java -jar movieadvisor.jar -td Action,Sci-Fi -b 1990,2010 -t star +Muestra las películas cuyo título contiene la palabra star, pertenecen al +género de acción y ciencia ficción y fueron estrenadas entre 1990 y 2010. + +java -jar movieadvisor.jar -lg +Muestra un listado con todos los géneros. + + +LICENCIAS + +Los datos utilizados sobre películas utilizados en este ejemplo son +reales y están sacados del sitio web www.imdb.com. Ten en cuenta +que solo puede ser usada con fines personales y no comerciales. + + \ No newline at end of file diff --git a/target/classes/com/antoniofrische/perifericosAdvisor/config/AppConfig.class b/target/classes/com/antoniofrische/perifericosAdvisor/config/AppConfig.class new file mode 100644 index 0000000..05fe655 Binary files /dev/null and b/target/classes/com/antoniofrische/perifericosAdvisor/config/AppConfig.class differ diff --git a/target/classes/com/antoniofrische/perifericosAdvisor/dao/PerifericoDao.class b/target/classes/com/antoniofrische/perifericosAdvisor/dao/PerifericoDao.class new file mode 100644 index 0000000..06e0129 Binary files /dev/null and b/target/classes/com/antoniofrische/perifericosAdvisor/dao/PerifericoDao.class differ diff --git a/target/classes/com/antoniofrische/perifericosAdvisor/dao/PerifericoDaoImplMemory.class b/target/classes/com/antoniofrische/perifericosAdvisor/dao/PerifericoDaoImplMemory.class new file mode 100644 index 0000000..b1f937c Binary files /dev/null and b/target/classes/com/antoniofrische/perifericosAdvisor/dao/PerifericoDaoImplMemory.class differ diff --git a/target/classes/com/antoniofrische/perifericosAdvisor/dao/UtilPerifericoFileReader.class b/target/classes/com/antoniofrische/perifericosAdvisor/dao/UtilPerifericoFileReader.class new file mode 100644 index 0000000..c142174 Binary files /dev/null and b/target/classes/com/antoniofrische/perifericosAdvisor/dao/UtilPerifericoFileReader.class differ diff --git a/target/classes/com/antoniofrische/perifericosAdvisor/model/Periferico.class b/target/classes/com/antoniofrische/perifericosAdvisor/model/Periferico.class new file mode 100644 index 0000000..2a9552b Binary files /dev/null and b/target/classes/com/antoniofrische/perifericosAdvisor/model/Periferico.class differ diff --git a/target/classes/imdb_data.csv b/target/classes/imdb_data.csv new file mode 100644 index 0000000..cff3b6c --- /dev/null +++ b/target/classes/imdb_data.csv @@ -0,0 +1,16 @@ +id;marca;nombre;descripcion;tipo;color;cable +30;Razer;Pro gamingX;Raton de alta calidad;raton,negro y blanco;true +32;Roccat;Kone Aimo;Raton con alta DPI;raton,Blanco;true +33;Logitech;G930;Volante para videojuegos;Volante,negro y azul;true +40;HyperX;gamingTX;Altavozes para juagar;altavozes,negro y gris;true +12;Razer;Fly pro gaming;Raton mas ligero del mercado;raton,Rojo;false +23;HyperX;Pro XDR 2;Pantalla con colores reales;Pantalla,negro;true +51;MarsGaming;Alfombria MG18;alfombria para la mejor presicion en los jeugos;Alfombria,rojo y blanco;false +46;Roccat;Khan aimo;cascos confortables para horas de juego;Cascos,negro;true +90;HyperX;Hiper gaming H15;Teclado para quien quiere montar se lo mismo;teclado,rojo;true +37;HyperX;Alloy Core RGB;Teclado a mejor precio;teclado,negro y verde;true +18;Razer;titanium GPU;Suporte para aguantar tajetas graficas;suporte,negro metallico;true +02;Logitech;G815 lightspeed;Teclado de alta calidad con bluetooth;teclado,blanco;false +11;MarsGaming;MG318 bulletproof;cascos speciales para ambientes ruidosos;cascos,blanco;true +66;Razer;Enki;silla confortable para gaming;silla,negro y gris;false +91;Logitech;lightspeed pro 10;Raton inalambrico para llevar;raton,gris;false diff --git a/target/classes/perifericoadvisor.properties b/target/classes/perifericoadvisor.properties new file mode 100644 index 0000000..99a01f1 --- /dev/null +++ b/target/classes/perifericoadvisor.properties @@ -0,0 +1,3 @@ +file.path=classpath:imdb_data.csv +file.csv.separator=; +file.csv.list_separator=, \ No newline at end of file