Browse Source

Added new Upgrades

master
Daniel 1 year ago
parent
commit
c53844995c
20 changed files with 233 additions and 14 deletions
  1. +1
    -0
      .classpath
  2. +20
    -0
      README.md
  3. +21
    -0
      src/main/playersearch/App.java
  4. +32
    -0
      src/main/playersearch/Help.java
  5. +0
    -0
      src/main/playersearch/Model/Fighter.java
  6. +88
    -0
      src/main/playersearch/Run.java
  7. +0
    -0
      src/main/playersearch/config/AppConfig.java
  8. +0
    -0
      src/main/playersearch/controller/CsvParser.java
  9. +0
    -0
      src/main/playersearch/dao/FighterDao.java
  10. +0
    -0
      src/main/playersearch/dao/IFighterDao.java
  11. +0
    -0
      src/main/playersearch/service/FighterQueryService.java
  12. +0
    -0
      src/main/playersearch/service/FighterService.java
  13. +14
    -0
      src/main/playersearch/service/IFightQueryService.java
  14. +0
    -0
      src/main/playersearch/service/IFightService.java
  15. +11
    -0
      src/main/projectresources/MMA_DanielKuperus.csv
  16. +32
    -0
      src/main/projectresources/help.txt
  17. +3
    -0
      src/main/projectresources/playersearch.properties
  18. +0
    -13
      src/main/service/IFightQueryService.java
  19. +10
    -0
      src/test/PlayerSearchAppTests.java
  20. +1
    -1
      target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties

+ 1
- 0
.classpath View File

@ -51,5 +51,6 @@
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>

+ 20
- 0
README.md View File

@ -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.")

+ 21
- 0
src/main/playersearch/App.java View File

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

+ 32
- 0
src/main/playersearch/Help.java View File

@ -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;
}
}

src/main/Model/Fighter.java → src/main/playersearch/Model/Fighter.java View File


+ 88
- 0
src/main/playersearch/Run.java View File

@ -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.");
}
}
}
}
}

src/main/config/AppConfig.java → src/main/playersearch/config/AppConfig.java View File


src/main/controller/CsvParser.java → src/main/playersearch/controller/CsvParser.java View File


src/main/dao/FighterDao.java → src/main/playersearch/dao/FighterDao.java View File


src/main/dao/IFighterDao.java → src/main/playersearch/dao/IFighterDao.java View File


src/main/service/FighterQueryService.java → src/main/playersearch/service/FighterQueryService.java View File


src/main/service/FighterService.java → src/main/playersearch/service/FighterService.java View File


+ 14
- 0
src/main/playersearch/service/IFightQueryService.java View File

@ -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);
}

src/main/service/IFightService.java → src/main/playersearch/service/IFightService.java View File


+ 11
- 0
src/main/projectresources/MMA_DanielKuperus.csv View File

@ -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

+ 32
- 0
src/main/projectresources/help.txt View File

@ -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.

+ 3
- 0
src/main/projectresources/playersearch.properties View File

@ -0,0 +1,3 @@
file.path=classpath:MMA_DanielKuperus.csv
file.csv.separator=;
file.csv.list_separator=,

+ 0
- 13
src/main/service/IFightQueryService.java View File

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

+ 10
- 0
src/test/PlayerSearchAppTests.java View File

@ -0,0 +1,10 @@
package mmaplayers.playersearch;
import org.junit.Test;
public class PlayerSearchAppTests {
@Test
void contextLoads() {
}
}

+ 1
- 1
target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties View File

@ -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


Loading…
Cancel
Save