From c53844995cfe5a2b9e3fa68278d7e4e230eddb8b Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 26 Nov 2022 22:38:20 +0100 Subject: [PATCH] Added new Upgrades --- .classpath | 1 + README.md | 20 +++++ src/main/playersearch/App.java | 21 +++++ src/main/playersearch/Help.java | 32 +++++++ .../{ => playersearch}/Model/Fighter.java | 0 src/main/playersearch/Run.java | 88 +++++++++++++++++++ .../{ => playersearch}/config/AppConfig.java | 0 .../controller/CsvParser.java | 0 .../{ => playersearch}/dao/FighterDao.java | 0 .../{ => playersearch}/dao/IFighterDao.java | 0 .../service/FighterQueryService.java | 0 .../service/FighterService.java | 0 .../service/IFightQueryService.java | 14 +++ .../service/IFightService.java | 0 .../projectresources/MMA_DanielKuperus.csv | 11 +++ src/main/projectresources/help.txt | 32 +++++++ .../projectresources/playersearch.properties | 3 + src/main/service/IFightQueryService.java | 13 --- src/test/PlayerSearchAppTests.java | 10 +++ .../danielkuperus/mmaplayers/pom.properties | 2 +- 20 files changed, 233 insertions(+), 14 deletions(-) create mode 100644 README.md create mode 100644 src/main/playersearch/App.java create mode 100644 src/main/playersearch/Help.java rename src/main/{ => playersearch}/Model/Fighter.java (100%) create mode 100644 src/main/playersearch/Run.java rename src/main/{ => playersearch}/config/AppConfig.java (100%) rename src/main/{ => playersearch}/controller/CsvParser.java (100%) rename src/main/{ => playersearch}/dao/FighterDao.java (100%) rename src/main/{ => playersearch}/dao/IFighterDao.java (100%) rename src/main/{ => playersearch}/service/FighterQueryService.java (100%) rename src/main/{ => playersearch}/service/FighterService.java (100%) create mode 100644 src/main/playersearch/service/IFightQueryService.java rename src/main/{ => playersearch}/service/IFightService.java (100%) create mode 100644 src/main/projectresources/MMA_DanielKuperus.csv create mode 100644 src/main/projectresources/help.txt create mode 100644 src/main/projectresources/playersearch.properties delete mode 100644 src/main/service/IFightQueryService.java create mode 100644 src/test/PlayerSearchAppTests.java diff --git a/.classpath b/.classpath index 0ca1374..a85dd0e 100644 --- a/.classpath +++ b/.classpath @@ -51,5 +51,6 @@ + diff --git a/README.md b/README.md new file mode 100644 index 0000000..6cf0038 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# Título +Creación de una aplicación de búsqueda de libros con Spring Core. + +## Uso +Para la creación de este proyecto hemos usado la tecnología de Spring Core para agilizar las relaciones entre los objetos. + +En esta app podrás realizar consultas como buscar un libro por género o por título, además se ha añadido un apartado de [ayuda](./src/main/resources/help.txt/) que muestra de forma clara el uso. + +## Ejemplo: Buscar un luchador por categoria. +``` +java -jar playersearch.jar -t welter +``` +``` +ID Nombre Categoria MejorDisciplina Victorias Derrotas +6 Eddie Alvaréz Peso Welter UFC 30 7 +7 Israel Adesanya Peso Welter MMA 20 1 +``` + +## Diagrama de clases +![Diagrama de clases.](./img/diagramaClases_booksearch.png "Diagrama de clases.") \ No newline at end of file diff --git a/src/main/playersearch/App.java b/src/main/playersearch/App.java new file mode 100644 index 0000000..88cc17a --- /dev/null +++ b/src/main/playersearch/App.java @@ -0,0 +1,21 @@ +package mmaplayers.playersearch; + +import mmaplayers.playersearch.config.AppConfig; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class App { + + public static void main(String[] args) { + + ApplicationContext appContext = new AnnotationConfigApplicationContext(AppConfig.class); + + Run runApp = appContext.getBean(Run.class); + + runApp.run(args); + + ((AnnotationConfigApplicationContext) appContext).close(); + + } + +} \ No newline at end of file diff --git a/src/main/playersearch/Help.java b/src/main/playersearch/Help.java new file mode 100644 index 0000000..ee4e1c6 --- /dev/null +++ b/src/main/playersearch/Help.java @@ -0,0 +1,32 @@ +package mmaplayers.playersearch; + +import org.springframework.stereotype.Component; +import org.springframework.util.ResourceUtils; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.stream.Collectors; + +@Component +public class Help { + + private String help; + + @PostConstruct + public void init() { + try { + help = Files + .lines(Paths.get(ResourceUtils.getFile("classpath:help.txt").toURI())) + .collect(Collectors.joining("\n")); + } catch (IOException e) { + System.err.println("Error cargando el texto de ayuda"); + System.exit(-1); + } + } + + public String getHelp() { + return help; + } +} diff --git a/src/main/Model/Fighter.java b/src/main/playersearch/Model/Fighter.java similarity index 100% rename from src/main/Model/Fighter.java rename to src/main/playersearch/Model/Fighter.java diff --git a/src/main/playersearch/Run.java b/src/main/playersearch/Run.java new file mode 100644 index 0000000..3906ada --- /dev/null +++ b/src/main/playersearch/Run.java @@ -0,0 +1,88 @@ +package mmaplayers.playersearch; + +import mmaplayers.playersearch.model.Fighter; +import mmaplayers.playersearch.service.IFightQueryService; +import mmaplayers.playersearch.service.IFightService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +@Component +public class Run { + + @Autowired + IFightService iFightService; + + @Autowired + IFightQueryService iFightQueryService; + + @Autowired + Help help; + + public void run(String[] args) { + + if (args.length < 1) { + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + } else if (args.length == 1) { + switch (args[0].toLowerCase()) { + case "-lg": + iBookService.findAllGenres().forEach(System.out::println); + break; + case "-h": + System.out.println(help.getHelp()); + break; + default: + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + + } + } else if (args.length % 2 != 0) { + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + } else if (args.length > 8) { + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + } else { + List argumentos = new ArrayList<>(); + + for (int i = 0; i < args.length; i += 2) { + argumentos.add(new String[]{args[i], args[i + 1]}); + } + + boolean error = false; + + for (String[] argumento : argumentos) { + switch (argumento[0].toLowerCase()) { + case "-ag": + iBookQueryService.anyGenre(argumento[1].split(",")); + break; + case "-tg": + iBookQueryService.allGenres(argumento[1].split(",")); + break; + case "-t": + iBookQueryService.anyTitle(argumento[1]); + break; + default: + error = true; + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + } + } + if (!error) { + Collection result = iBookQueryService.exec(); + System.out.printf("%s\t%-35s\t%-22s\t%s\n", "ID", "Título", "Autor", "Género"); + if (result != null) { + result.forEach(book -> System.out.printf("%s\t%-35s\t%-22s\t%s\n", + book.getId(), book.getName(), book.getAuthors(), + book.getGenre())); + } else { + System.out.println("No hay libros que cumplan esos criterios."); + } + } + } + } +} diff --git a/src/main/config/AppConfig.java b/src/main/playersearch/config/AppConfig.java similarity index 100% rename from src/main/config/AppConfig.java rename to src/main/playersearch/config/AppConfig.java diff --git a/src/main/controller/CsvParser.java b/src/main/playersearch/controller/CsvParser.java similarity index 100% rename from src/main/controller/CsvParser.java rename to src/main/playersearch/controller/CsvParser.java diff --git a/src/main/dao/FighterDao.java b/src/main/playersearch/dao/FighterDao.java similarity index 100% rename from src/main/dao/FighterDao.java rename to src/main/playersearch/dao/FighterDao.java diff --git a/src/main/dao/IFighterDao.java b/src/main/playersearch/dao/IFighterDao.java similarity index 100% rename from src/main/dao/IFighterDao.java rename to src/main/playersearch/dao/IFighterDao.java diff --git a/src/main/service/FighterQueryService.java b/src/main/playersearch/service/FighterQueryService.java similarity index 100% rename from src/main/service/FighterQueryService.java rename to src/main/playersearch/service/FighterQueryService.java diff --git a/src/main/service/FighterService.java b/src/main/playersearch/service/FighterService.java similarity index 100% rename from src/main/service/FighterService.java rename to src/main/playersearch/service/FighterService.java diff --git a/src/main/playersearch/service/IFightQueryService.java b/src/main/playersearch/service/IFightQueryService.java new file mode 100644 index 0000000..0af2a52 --- /dev/null +++ b/src/main/playersearch/service/IFightQueryService.java @@ -0,0 +1,14 @@ +package mmaplayers.fightersearch.service; + +import mmaplayers.fightersearch.model.Fighter; + +import java.util.Collection; +import java.util.Collection; + +public interface IBookQueryService { + public Collection exec(); + public IBookQueryService anyCategorie(String... categorie); + public IBookQueryService allCategories(String... categories); + public IBookQueryService anyName(String name); + +} diff --git a/src/main/service/IFightService.java b/src/main/playersearch/service/IFightService.java similarity index 100% rename from src/main/service/IFightService.java rename to src/main/playersearch/service/IFightService.java diff --git a/src/main/projectresources/MMA_DanielKuperus.csv b/src/main/projectresources/MMA_DanielKuperus.csv new file mode 100644 index 0000000..dd1eb25 --- /dev/null +++ b/src/main/projectresources/MMA_DanielKuperus.csv @@ -0,0 +1,11 @@ +Id;Nombre;Categoria;Mejor Disciplina;Victorias;Derrotas +1;Valentina Shevchenko;Peso Pluma;MMA;20;3 +2;Antonio Nogueira;Peso Pesado;UFC;34;12 +3;Alistair Overeem;Peso Pesado;K1;47;19 +4;Robbie Lawler;Peso Pesado;MMA;28;15 +5;Matt Hughes;Peso Pesado;FCF;45;9 +6;Eddie Alvaréz;Peso Welter;UFC;30;7 +7;Israel Adesanya;Peso Welter;MMA;20;1 +8;Henry Cejudo;Peso Mosca;UFC;16;2 +9;Quinton Jackson ;Peso Semipesado;UFC;38;14 +10;Randy Couture;Peso Ligero;MMA;21;9 diff --git a/src/main/projectresources/help.txt b/src/main/projectresources/help.txt new file mode 100644 index 0000000..66df601 --- /dev/null +++ b/src/main/projectresources/help.txt @@ -0,0 +1,32 @@ + +Sintaxis: java -jar booksearch.jar [OPCIONES] + + -lg + Lista las diferentes categorias de luchadores del documento. + No se pueden utilizar más parámetros. + + -ag categoria1,categoria2,categoria... + Lista aquellos luchadores que pertenecen a al menos una de los categorias + que se indican. El listado de categorias no puede incluir espacios. + + -tg categoria1,categoria2,categoria... + Lista aquellas categorias que pertenecen a todos y cada uno de los + luchadores que se indican. El listado de categorias no puede incluir espacios. + + -t nombre + Lista aquellos luchadores cuyo nombre contiene la cadena proporcionada. + Se ignorará el uso de mayúsculas/minúsculas en la comparación. + + -h + Muestra este mensaje de ayuda. + +EJEMPLO DE USO + +java -jar playersearch.jar -t shev +Muestra los luvhadores cuyo nombre contiene la palabra shev. + +java -jar playersearch.jar -td Peso Pluma +Muestra los luchadores que pertenecen a la categoria peso pluma + +java -jar playersearch.jar -lg +Muestra un listado con todos las categorias. \ No newline at end of file diff --git a/src/main/projectresources/playersearch.properties b/src/main/projectresources/playersearch.properties new file mode 100644 index 0000000..005cfd8 --- /dev/null +++ b/src/main/projectresources/playersearch.properties @@ -0,0 +1,3 @@ +file.path=classpath:MMA_DanielKuperus.csv +file.csv.separator=; +file.csv.list_separator=, \ No newline at end of file diff --git a/src/main/service/IFightQueryService.java b/src/main/service/IFightQueryService.java deleted file mode 100644 index 7584615..0000000 --- a/src/main/service/IFightQueryService.java +++ /dev/null @@ -1,13 +0,0 @@ -package mmaplayers.fightersearch.service; - -import mmaplayers.fightersearch.model.Fighter; - -import java.util.Collection; -public interface IFightQueryService { - - public Collection findAllCategories(); - public Collection findByAnyCategorie(String... categories); - public Collection findByAllCategories(String... categories); - public Collection findByNameContains(String name); - public Collection findAll(); -} diff --git a/src/test/PlayerSearchAppTests.java b/src/test/PlayerSearchAppTests.java new file mode 100644 index 0000000..6fddb69 --- /dev/null +++ b/src/test/PlayerSearchAppTests.java @@ -0,0 +1,10 @@ +package mmaplayers.playersearch; + +import org.junit.Test; + +public class PlayerSearchAppTests { + @Test + void contextLoads() { + } + +} diff --git a/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties b/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties index 5bfabdd..74cb3fb 100644 --- a/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties +++ b/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven Integration for Eclipse -#Thu Nov 24 01:08:48 CET 2022 +#Sat Nov 26 20:41:47 CET 2022 m2e.projectLocation=C\:\\Users\\Daniel\\Documents\\workspace-spring-tool-suite-4-4.16.1.RELEASE\\mmaplayers m2e.projectName=mmaplayers groupId=danielkuperus