| @ -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 | |||||
|  | |||||
| @ -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(); | |||||
| } | |||||
| } | |||||
| @ -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; | |||||
| } | |||||
| } | |||||
| @ -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<String[]> 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<Book> 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."); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @ -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<Book> exec(); | |||||
| public IBookQueryService anyCategorie(String... categorie); | |||||
| public IBookQueryService allCategories(String... categories); | |||||
| public IBookQueryService anyName(String name); | |||||
| } | |||||
| @ -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 | |||||
| @ -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. | |||||
| @ -0,0 +1,3 @@ | |||||
| file.path=classpath:MMA_DanielKuperus.csv | |||||
| file.csv.separator=; | |||||
| file.csv.list_separator=, | |||||
| @ -1,13 +0,0 @@ | |||||
| package mmaplayers.fightersearch.service; | |||||
| import mmaplayers.fightersearch.model.Fighter; | |||||
| import java.util.Collection; | |||||
| public interface IFightQueryService { | |||||
| public Collection<String> findAllCategories(); | |||||
| public Collection<Fighter> findByAnyCategorie(String... categories); | |||||
| public Collection<Fighter> findByAllCategories(String... categories); | |||||
| public Collection<Fighter> findByNameContains(String name); | |||||
| public Collection<Fighter> findAll(); | |||||
| } | |||||
| @ -0,0 +1,10 @@ | |||||
| package mmaplayers.playersearch; | |||||
| import org.junit.Test; | |||||
| public class PlayerSearchAppTests { | |||||
| @Test | |||||
| void contextLoads() { | |||||
| } | |||||
| } | |||||