Browse Source

Implementación de nuevos métodos

master
Dani Minguet 2 years ago
parent
commit
16f5aff0d6
22 changed files with 256 additions and 165 deletions
  1. +36
    -23
      README.md
  2. +27
    -17
      src/main/java/com/daniminguet/videogameadvisor/VideogameAdvisorRunApp.java
  3. +1
    -1
      src/main/java/com/daniminguet/videogameadvisor/dao/UtilVideogameFileReader.java
  4. +5
    -5
      src/main/java/com/daniminguet/videogameadvisor/dao/VideogameDao.java
  5. +22
    -22
      src/main/java/com/daniminguet/videogameadvisor/dao/VideogameDaoImplMemory.java
  6. +5
    -6
      src/main/java/com/daniminguet/videogameadvisor/model/Videogame.java
  7. +9
    -6
      src/main/java/com/daniminguet/videogameadvisor/service/VideogameQueryService.java
  8. +43
    -22
      src/main/java/com/daniminguet/videogameadvisor/service/VideogameQueryServiceImpl.java
  9. +37
    -16
      src/main/java/com/daniminguet/videogameadvisor/service/VideogameService.java
  10. +10
    -10
      src/main/resources/VIDEOJUEGOS.csv
  11. +25
    -13
      src/main/resources/ayuda.txt
  12. +1
    -1
      target/classes/META-INF/maven/com.daniminguet.springcore/PracticaSpringCore/pom.properties
  13. +10
    -10
      target/classes/VIDEOJUEGOS.csv
  14. +25
    -13
      target/classes/ayuda.txt
  15. BIN
      target/classes/com/daniminguet/videogameadvisor/VideogameAdvisorRunApp.class
  16. BIN
      target/classes/com/daniminguet/videogameadvisor/dao/UtilVideogameFileReader.class
  17. BIN
      target/classes/com/daniminguet/videogameadvisor/dao/VideogameDao.class
  18. BIN
      target/classes/com/daniminguet/videogameadvisor/dao/VideogameDaoImplMemory.class
  19. BIN
      target/classes/com/daniminguet/videogameadvisor/model/Videogame.class
  20. BIN
      target/classes/com/daniminguet/videogameadvisor/service/VideogameQueryService.class
  21. BIN
      target/classes/com/daniminguet/videogameadvisor/service/VideogameQueryServiceImpl.class
  22. BIN
      target/classes/com/daniminguet/videogameadvisor/service/VideogameService.class

+ 36
- 23
README.md View File

@ -8,16 +8,17 @@ Aquí muestro el fichero csv que utilizo:
``` ```
ID,NOMBRE,DESARROLLADOR,GENERO,FECHA SALIDA,PLATAFORMAS DISPONIBLES ID,NOMBRE,DESARROLLADOR,GENERO,FECHA SALIDA,PLATAFORMAS DISPONIBLES
1,God of War: Ragnarok,Santa Monica Studio,Accion-Aventura-Lucha-Rol,09/11/2022,PS5 y PS4
2,FIFA 23,Electronic Arts,Deportes-Simulacion,27/09/2022,PS5-Nintendo Switch-XBOX y PC
3,Minecraft,Mojang Studios,Supervivencia-Sandbox,17/05/2009,PS-XBOX-Nintendo, Moviles y PC
4,Grand Theft Auto V,Rockstar Games,Mundo abierto,17/09/2013,PS-XBOX y PC
5,CounterStrike: Global Offensive,Valve Corporation,De disparos tactico,21/08/2012,XBOX y PC
6,Elden Ring,FromSoftware,Aventura-Mundo abierto,25/02/2022,PS-XBOX y PC
7,Uncharted 4,Naughty Dog,Accion-Aventura,10/05/2016,PS y PC
8,Ghost of Tsushima,Sucker Punch Productions,Rol-Sigilo-Accion-Aventura-Lucha,17/07/2020,PS5 y PS4
9,The Witcher 3,CD Projekt,Mundo abierto,19/05/2015,PS-NINTENDO-XBOX y PC
10,Assassins Creed: Origins,Ubisoft,Mundo abierto-Accion-Aventura-Sigilo,27/10/2017,PS-XBOX y PC
1,God of War: Ragnarok,Santa Monica Studio,Accion-Aventura-Lucha-Rol,09/11/2022,PS5-PS4
2,FIFA 23,Electronic Arts,Deportes-Simulacion,27/09/2022,PS5-Nintendo Switch-XBOX-PC
3,Minecraft,Mojang Studios,Supervivencia-Sandbox,17/05/2009,PS-XBOX-Nintendo-Moviles-PC
4,Grand Theft Auto V,Rockstar Games,Mundo abierto,17/09/2013,PS-XBOX-PC
5,CounterStrike: Global Offensive,Valve Corporation,De disparos tactico,21/08/2012,XBOX-PC
6,Elden Ring,FromSoftware,Aventura-Mundo abierto,25/02/2022,PS-XBOX-PC
7,Uncharted 4,Naughty Dog,Accion-Aventura,10/05/2016,PS-PC
8,Ghost of Tsushima,Sucker Punch Productions,Rol-Sigilo-Accion-Aventura-Lucha,17/07/2020,PS5-PS4
9,The Witcher 3,CD Projekt,Mundo abierto,19/05/2015,PS-NINTENDO-XBOX-PC
10,Assassins Creed: Origins,Ubisoft,Mundo abierto-Accion-Aventura-Sigilo,27/10/2017,PS-XBOX-PC
``` ```
Al iniciar el programa, si no hay parámetros definidos te debería mostrar una alerta de que no se han indicado, y mostrará el contenido del fichero de ayuda, para saber que parámetros puedes utilizar: Al iniciar el programa, si no hay parámetros definidos te debería mostrar una alerta de que no se han indicado, y mostrará el contenido del fichero de ayuda, para saber que parámetros puedes utilizar:
@ -26,42 +27,54 @@ Al iniciar el programa, si no hay parámetros definidos te debería mostrar una
No se ha pasado ningún parámetro No se ha pasado ningún parámetro
Sintaxis: java -jar videogameadvisor.jar [OPCIONES] Sintaxis: java -jar videogameadvisor.jar [OPCIONES]
-l
Lista todos los videojuegos.
No se pueden utilizar más parámetros.
-lg -lg
Lista los diferentes géneros de videojuegos de la colección.
Lista los diferentes géneros de videojuegos.
No se pueden utilizar más parámetros.
-lp
Lista las diferentes plataformas de videojuegos.
No se pueden utilizar más parámetros. No se pueden utilizar más parámetros.
-ag genero1,genero2,genero...
-bg genero1,genero2,genero...
Lista aquellos videojuegos que pertenecen a al menos uno de los géneros Lista aquellos videojuegos que pertenecen a al menos uno de los géneros
que se indican. El listado de géneros no puede incluir espacios. que se indican. El listado de géneros no puede incluir espacios.
-tg genero1,genero2,genero...
Lista aquellos videojuegos 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
-ba año
Lista aquellos videojuegos que se estrenaron en el año indicado. Lista aquellos videojuegos que se estrenaron en el año indicado.
El año debe expresarse con 4 cifras. El año debe expresarse con 4 cifras.
-b desde,hasta
-bas desde,hasta
Lista aquellos videojuegos que se estrenaron entre los años DESDE y HASTA. Lista aquellos videojuegos que se estrenaron entre los años DESDE y HASTA.
Los años indicados están incluidos. Deben expresarse con 4 cifras. Los años indicados están incluidos. Deben expresarse con 4 cifras.
-t titulo
Lista aquellos videojuegos cuyo título contiene la cadena proporcionada.
-n nombre
Lista aquellos videojuegos cuyo nombre contiene la cadena proporcionada.
Se ignorará el uso de mayúsculas/minúsculas en la comparación.
-d desarrollador
Lista aquellos videojuegos cuyo desarrollador contiene la cadena proporcionada.
Se ignorará el uso de mayúsculas/minúsculas en la comparación. Se ignorará el uso de mayúsculas/minúsculas en la comparación.
-bp plataforma1,plataforma2,plataforma...
Lista aquellos videojuegos que pertenecen a al menos una de las plataformas
que se indican. El listado de plataformas no puede incluir espacios.
-h -h
Muestra este mensaje de ayuda. Muestra este mensaje de ayuda.
EJEMPLOS DE USO EJEMPLOS DE USO
java -jar videogameadvisor.jar -y 2018 -ag Accion,Rol
java -jar videogameadvisor.jar -ba 2018 -bg Accion,Rol
Muestra los videojuegos que han salido en el año 2018 y son de acción y/o de comedia. Muestra los videojuegos que han salido en el año 2018 y son de acción y/o de comedia.
java -jar videogameadvisor.jar -t war
java -jar videogameadvisor.jar -n war
Muestra los videojuegos cuyo título contiene la palabra war. Muestra los videojuegos cuyo título contiene la palabra war.
java -jar videogameadvisor.jar -td Accion,Aventura -b 2000,2010 -t auto
java -jar videogameadvisor.jar -bg Accion,Aventura -bas 2000,2010 -n auto
Muestra los videojuegos cuyo título contiene la palabra auto, pertenecen al Muestra los videojuegos cuyo título contiene la palabra auto, pertenecen al
género de acción y aventura y fueron estrenados entre 2000 y 2010. género de acción y aventura y fueron estrenados entre 2000 y 2010.


+ 27
- 17
src/main/java/com/daniminguet/videogameadvisor/VideogameAdvisorRunApp.java View File

@ -27,8 +27,14 @@ public class VideogameAdvisorRunApp {
System.out.println(help.getHelp()); System.out.println(help.getHelp());
} else if (args.length == 1){ } else if (args.length == 1){
switch(args[0].toLowerCase()) { switch(args[0].toLowerCase()) {
case "-l":
videogameService.mostrarTodos().forEach(System.out::println);
break;
case "-lg": case "-lg":
videogameService.findAllGenres().forEach(System.out::println);
videogameService.mostrarGeneros().forEach(System.out::println);
break;
case "-lp":
videogameService.mostrarPlataformas().forEach(System.out::println);
break; break;
case "-h": case "-h":
System.out.println(help.getHelp()); System.out.println(help.getHelp());
@ -57,36 +63,40 @@ public class VideogameAdvisorRunApp {
for(String[] argumento : argumentos) { for(String[] argumento : argumentos) {
switch (argumento[0].toLowerCase()) { switch (argumento[0].toLowerCase()) {
case "-ag":
videogameQueryService.anyGenre(argumento[1].split(","));
case "-bg":
videogameQueryService.buscarGenero(argumento[1].split(","));
break;
case "-ba":
videogameQueryService.buscarPorAnyo(argumento[1]);
break; break;
case "-tg":
videogameQueryService.allGenres(argumento[1].split(","));
case "-bas":
String[] anyos = argumento[1].split(",");
videogameQueryService.buscarEntreAnyos(anyos[0], anyos[1]);
break; break;
case "-y":
videogameQueryService.year(argumento[1]);
case "-n":
videogameQueryService.buscarNombre(argumento[1]);
break; break;
case "-b":
String[] years = argumento[1].split(",");
videogameQueryService.betweenYears(years[0], years[1]);
case "-d":
videogameQueryService.buscarDesarrollador(argumento[1]);
break; break;
case "-t":
videogameQueryService.titleContains(argumento[1]);
case "-bp":
videogameQueryService.buscarPlataforma(argumento[1].split(","));
break; break;
default: error = true;
System.out.println("Error de sintaxis");
System.out.println(help.getHelp());
default:
error = true;
System.out.println("Error de sintaxis");
System.out.println(help.getHelp());
} }
} }
if (!error) { if (!error) {
Collection<Videogame> result = videogameQueryService.exec();
Collection<Videogame> result = videogameQueryService.ejecutar();
System.out.printf("%s\t%-50s\t%s\t%s\t%s\t%s\n","ID","Nombre", "Desarrollador", "Géneros", "Fecha de salida", "Plataformas disonibles"); System.out.printf("%s\t%-50s\t%s\t%s\t%s\t%s\n","ID","Nombre", "Desarrollador", "Géneros", "Fecha de salida", "Plataformas disonibles");
if (result != null) { if (result != null) {
result.forEach(vg -> System.out.printf("%s\t%-50s\t%s\t%s\t%s\t%s\n", result.forEach(vg -> System.out.printf("%s\t%-50s\t%s\t%s\t%s\t%s\n",
vg.getId(), vg.getNombre(), vg.getDesarrollador(), vg.getId(), vg.getNombre(), vg.getDesarrollador(),
vg.getGeneros().stream().collect(Collectors.joining(", ")), vg.getGeneros().stream().collect(Collectors.joining(", ")),
vg.getFechaSalida(), vg.getPlataformas()));
vg.getFechaSalida(), vg.getPlataformas().stream().collect(Collectors.joining(", "))));
} else { } else {
System.out.println("No hay videojuegos que cumplan esos criterios. Lo sentimos"); System.out.println("No hay videojuegos que cumplan esos criterios. Lo sentimos");
} }


+ 1
- 1
src/main/java/com/daniminguet/videogameadvisor/dao/UtilVideogameFileReader.java View File

@ -23,7 +23,7 @@ public class UtilVideogameFileReader {
.map(line -> { .map(line -> {
String[] values = line.split(separator); String[] values = line.split(separator);
return new Videogame(Long.parseLong(values[0]), values[1], values[2], return new Videogame(Long.parseLong(values[0]), values[1], values[2],
Arrays.asList(values[3].split(listSeparator)), values[4], values[5]);
Arrays.asList(values[3].split(listSeparator)), values[4], Arrays.asList(values[5].split(listSeparator)));
}).collect(Collectors.toList()); }).collect(Collectors.toList());
// @formatter:on // @formatter:on


+ 5
- 5
src/main/java/com/daniminguet/videogameadvisor/dao/VideogameDao.java View File

@ -5,9 +5,9 @@ import java.util.Collection;
import com.daniminguet.videogameadvisor.model.Videogame; import com.daniminguet.videogameadvisor.model.Videogame;
public interface VideogameDao { public interface VideogameDao {
public Videogame findById(long id);
public Collection<Videogame> findAll();
public void insert(Videogame videogame);
public void edit(Videogame videogame);
public void delete(long id);
public Videogame buscarPorId(long id);
public Collection<Videogame> mostrarTodos();
public void nuevoVideojuego(Videogame videogame);
public void editarVideojuego(Videogame videogame);
public void borrarVideojuego(long id);
} }

+ 22
- 22
src/main/java/com/daniminguet/videogameadvisor/dao/VideogameDaoImplMemory.java View File

@ -16,56 +16,56 @@ import com.daniminguet.videogameadvisor.model.Videogame;
@Repository @Repository
public class VideogameDaoImplMemory implements VideogameDao { public class VideogameDaoImplMemory implements VideogameDao {
public List<Videogame> videogames = new ArrayList<Videogame>();
public List<Videogame> videojuegos = new ArrayList<Videogame>();
@Autowired @Autowired
private AppConfig appConfig; private AppConfig appConfig;
@PostConstruct @PostConstruct
public void init() {
videogames = UtilVideogameFileReader.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator());
public void iniciar() {
videojuegos = UtilVideogameFileReader.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator());
} }
public Videogame findById(long id) {
Optional<Videogame> result = videogames.stream().filter(vg -> vg.getId() == id).findFirst();
return result.orElse(null);
public Videogame buscarPorId(long id) {
Optional<Videogame> videojuegosPorId = videojuegos.stream().filter(vg -> vg.getId() == id).findFirst();
return videojuegosPorId.orElse(null);
} }
public Collection<Videogame> findAll() {
return videogames;
public Collection<Videogame> mostrarTodos() {
return videojuegos;
} }
public void insert(Videogame videogame) {
videogames.add(videogame);
public void nuevoVideojuego(Videogame videojuego) {
videojuegos.add(videojuego);
} }
public void edit(Videogame videogame) {
int i = getIndexOf(videogame.getId());
public void editarVideojuego(Videogame videojuego) {
int i = obtenerId(videojuego.getId());
if(i != -1) { if(i != -1) {
videogames.set(i, videogame);
videojuegos.set(i, videojuego);
} }
} }
public void delete(long id) {
int i = getIndexOf(id);
public void borrarVideojuego(long id) {
int i = obtenerId(id);
if(i != -1) { if(i != -1) {
videogames.remove(i);
videojuegos.remove(i);
} }
} }
private int getIndexOf(long id) {
boolean found = false;
private int obtenerId(long id) {
boolean encontrado = false;
int i = 0; int i = 0;
while(!found && i < videogames.size()) {
if(videogames.get(i).getId() == id) {
found = true;
while(!encontrado && i < videojuegos.size()) {
if(videojuegos.get(i).getId() == id) {
encontrado = true;
} else { } else {
i++; i++;
} }
} }
return (found) ? i : -1;
return (encontrado) ? i : -1;
} }
} }

+ 5
- 6
src/main/java/com/daniminguet/videogameadvisor/model/Videogame.java View File

@ -8,12 +8,11 @@ public class Videogame {
private String desarrollador; private String desarrollador;
private List<String> generos; private List<String> generos;
private String fechaSalida; private String fechaSalida;
private String plataformas;
private List<String> plataformas;
public Videogame() {} public Videogame() {}
public Videogame(long id, String nombre, String desarrollador, List<String> generos, String fechaSalida,
String plataformas) {
public Videogame(long id, String nombre, String desarrollador, List<String> generos, String fechaSalida, List<String> plataformas) {
this.id = id; this.id = id;
this.nombre = nombre; this.nombre = nombre;
this.desarrollador = desarrollador; this.desarrollador = desarrollador;
@ -62,18 +61,18 @@ public class Videogame {
this.fechaSalida = fechaSalida; this.fechaSalida = fechaSalida;
} }
public String getPlataformas() {
public List<String> getPlataformas() {
return plataformas; return plataformas;
} }
public void setPlataformas(String plataformas) {
public void setPlataformas(List<String> plataformas) {
this.plataformas = plataformas; this.plataformas = plataformas;
} }
@Override @Override
public String toString() { public String toString() {
return "Videogame [id=" + id + ", nombre=" + nombre + ", desarrollador=" + desarrollador + ", generos=" return "Videogame [id=" + id + ", nombre=" + nombre + ", desarrollador=" + desarrollador + ", generos="
+ generos.toString() + ", fechaSalida=" + fechaSalida + ", plataformas=" + plataformas + "]";
+ generos.toString() + ", fechaSalida=" + fechaSalida + ", plataformas=" + plataformas.toString() + "]";
} }


+ 9
- 6
src/main/java/com/daniminguet/videogameadvisor/service/VideogameQueryService.java View File

@ -5,10 +5,13 @@ import java.util.Collection;
import com.daniminguet.videogameadvisor.model.Videogame; import com.daniminguet.videogameadvisor.model.Videogame;
public interface VideogameQueryService { public interface VideogameQueryService {
public Collection<Videogame> exec();
public VideogameQueryService anyGenre(String... genres);
public VideogameQueryService allGenres(String... genres);
public VideogameQueryService year(String year);
public VideogameQueryService betweenYears(String from, String to);
public VideogameQueryService titleContains(String title);
public Collection<Videogame> ejecutar();
public VideogameQueryService buscarGenero(String... genero);
public VideogameQueryService mostrarGeneros(String... generos);
public VideogameQueryService buscarPorAnyo(String anyo);
public VideogameQueryService buscarEntreAnyos(String desde, String hasta);
public VideogameQueryService buscarNombre(String nombre);
public VideogameQueryService buscarDesarrollador(String desarrollador);
public VideogameQueryService buscarPlataforma(String... plataforma);
public VideogameQueryService mostrarPlataformas(String... plataformas);
} }

+ 43
- 22
src/main/java/com/daniminguet/videogameadvisor/service/VideogameQueryServiceImpl.java View File

@ -22,14 +22,14 @@ public class VideogameQueryServiceImpl implements VideogameQueryService {
private Predicate<Videogame> predicate; private Predicate<Videogame> predicate;
@PostConstruct @PostConstruct
public void init() {
public void iniciar() {
predicate = null; predicate = null;
} }
@Override @Override
public Collection<Videogame> exec() {
public Collection<Videogame> ejecutar() {
//@formatter:off //@formatter:off
return dao.findAll()
return dao.mostrarTodos()
.stream() .stream()
.filter(predicate) .filter(predicate)
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -37,44 +37,65 @@ public class VideogameQueryServiceImpl implements VideogameQueryService {
} }
@Override @Override
public VideogameQueryService anyGenre(String... genres) {
Predicate<Videogame> pAnyGenre = (vg -> Arrays.stream(genres).anyMatch(vg.getGeneros()::contains));
predicate = (predicate == null) ? pAnyGenre : predicate.and(pAnyGenre);
public VideogameQueryService buscarGenero(String... genero) {
Predicate<Videogame> pBuscarGenero = (vg -> Arrays.stream(genero).anyMatch(vg.getGeneros()::contains));
predicate = (predicate == null) ? pBuscarGenero : predicate.and(pBuscarGenero);
return this; return this;
} }
@Override @Override
public VideogameQueryService allGenres(String... genres) {
Predicate<Videogame> pAllGenre = (vg -> Arrays.stream(genres).allMatch(vg.getGeneros()::contains));
predicate = (predicate == null) ? pAllGenre : predicate.and(pAllGenre);
public VideogameQueryService mostrarGeneros(String... generos) {
Predicate<Videogame> pTodosGeneros = (vg -> Arrays.stream(generos).allMatch(vg.getGeneros()::contains));
predicate = (predicate == null) ? pTodosGeneros : predicate.and(pTodosGeneros);
return this; return this;
} }
@Override @Override
public VideogameQueryService year(String year) {
Predicate<Videogame> pYear = (vg -> vg.getFechaSalida().substring(vg.getFechaSalida().length()-4, vg.getFechaSalida().length()-1).equalsIgnoreCase(year));
predicate = (predicate == null) ? pYear : predicate.and(pYear);
public VideogameQueryService buscarPorAnyo(String anyo) {
Predicate<Videogame> pAnyo = (vg -> vg.getFechaSalida().substring(vg.getFechaSalida().length()-4, vg.getFechaSalida().length()-1).equalsIgnoreCase(anyo));
predicate = (predicate == null) ? pAnyo : predicate.and(pAnyo);
return this; return this;
} }
@Override @Override
public VideogameQueryService betweenYears(String from, String to) {
Predicate<Videogame> pBetweenYears = (vg -> {
LocalDate fromYear = LocalDate.of(Integer.parseInt(from), 1, 1);
LocalDate toYear = LocalDate.of(Integer.parseInt(to), 1, 3);
LocalDate videogameYear = LocalDate.of(Integer.parseInt(vg.getFechaSalida().substring(vg.getFechaSalida().length()-4, vg.getFechaSalida().length()-1)), 1, 2);
public VideogameQueryService buscarEntreAnyos(String desde, String hasta) {
Predicate<Videogame> pEntreAnyos = (vg -> {
LocalDate desdeAnyo = LocalDate.of(Integer.parseInt(desde), 1, 1);
LocalDate hastaAnyo = LocalDate.of(Integer.parseInt(hasta), 1, 3);
LocalDate videojuego = LocalDate.of(Integer.parseInt(vg.getFechaSalida().substring(vg.getFechaSalida().length()-4, vg.getFechaSalida().length()-1)), 1, 2);
return videogameYear.isAfter(fromYear) && videogameYear.isBefore(toYear);
return videojuego.isAfter(desdeAnyo) && videojuego.isBefore(hastaAnyo);
}); });
predicate = (predicate == null) ? pBetweenYears : predicate.and(pBetweenYears);
predicate = (predicate == null) ? pEntreAnyos : predicate.and(pEntreAnyos);
return this; return this;
} }
@Override @Override
public VideogameQueryService titleContains(String title) {
Predicate<Videogame> pTitleContains = (vg -> vg.getNombre().toLowerCase().contains(title.toLowerCase()));
predicate = (predicate == null) ? pTitleContains : predicate.and(pTitleContains);
public VideogameQueryService buscarNombre(String nombre) {
Predicate<Videogame> pNombre = (vg -> vg.getNombre().toLowerCase().contains(nombre.toLowerCase()));
predicate = (predicate == null) ? pNombre : predicate.and(pNombre);
return this;
}
@Override
public VideogameQueryService buscarDesarrollador(String desarrollador) {
Predicate<Videogame> pDesarrollador = (vg -> vg.getNombre().toLowerCase().contains(desarrollador.toLowerCase()));
predicate = (predicate == null) ? pDesarrollador : predicate.and(pDesarrollador);
return this;
}
@Override
public VideogameQueryService buscarPlataforma(String... plataforma) {
Predicate<Videogame> pBuscarPlataforma = (vg -> Arrays.stream(plataforma).anyMatch(vg.getPlataformas()::contains));
predicate = (predicate == null) ? pBuscarPlataforma : predicate.and(pBuscarPlataforma);
return this;
}
@Override
public VideogameQueryService mostrarPlataformas(String... plataformas) {
Predicate<Videogame> pTodasPlataformas = (vg -> Arrays.stream(plataformas).allMatch(vg.getPlataformas()::contains));
predicate = (predicate == null) ? pTodasPlataformas : predicate.and(pTodasPlataformas);
return this; return this;
} }


+ 37
- 16
src/main/java/com/daniminguet/videogameadvisor/service/VideogameService.java View File

@ -18,11 +18,11 @@ public class VideogameService {
@Autowired @Autowired
VideogameQueryService queryService; VideogameQueryService queryService;
public Collection<String> findAllGenres() {
List<String> result = null;
public Collection<String> mostrarGeneros() {
List<String> generos = null;
// @formatter:off // @formatter:off
result = videogameDao.findAll()
generos = videogameDao.mostrarTodos()
.stream() .stream()
.map(vg -> vg.getGeneros()) .map(vg -> vg.getGeneros())
.flatMap(list -> list.stream()) .flatMap(list -> list.stream())
@ -32,30 +32,51 @@ public class VideogameService {
// @formatter:on // @formatter:on
return result;
return generos;
} }
public Collection<Videogame> findByAnyGenre(String... genres) {
return queryService.anyGenre(genres).exec();
public Collection<Videogame> buscarGenero(String... genero) {
return queryService.buscarGenero(genero).ejecutar();
} }
public Collection<Videogame> findByAllGenres(String... genres) {
return queryService.allGenres(genres).exec();
public Collection<Videogame> buscarAnyo(String anyo) {
return queryService.buscarPorAnyo(anyo).ejecutar();
} }
public Collection<Videogame> findByYear(String year) {
return queryService.year(year).exec();
public Collection<Videogame> buscarEntreAnyos(String desde, String hasta) {
return queryService.buscarEntreAnyos(desde, hasta).ejecutar();
} }
public Collection<Videogame> findBetweenYears(String from, String to) {
return queryService.betweenYears(from, to).exec();
public Collection<Videogame> buscarNombre(String nombre) {
return queryService.buscarNombre(nombre).ejecutar();
} }
public Collection<Videogame> findByTitleContains(String title) {
return queryService.titleContains(title).exec();
public Collection<Videogame> mostrarTodos() {
return videogameDao.mostrarTodos();
} }
public Collection<Videogame> buscarDesarrollador(String desarrollador) {
return queryService.buscarDesarrollador(desarrollador).ejecutar();
}
public Collection<Videogame> buscarPlataforma(String plataforma) {
return queryService.buscarPlataforma(plataforma).ejecutar();
}
public Collection<String> mostrarPlataformas() {
List<String> plataformas = null;
// @formatter:off
plataformas = videogameDao.mostrarTodos()
.stream()
.map(vg -> vg.getPlataformas())
.flatMap(list -> list.stream())
.distinct()
.sorted()
.collect(Collectors.toList());
// @formatter:on
public Collection<Videogame> findAll() {
return videogameDao.findAll();
return plataformas;
} }
} }

+ 10
- 10
src/main/resources/VIDEOJUEGOS.csv View File

@ -1,11 +1,11 @@
ID,NOMBRE,DESARROLLADOR,GENERO,FECHA SALIDA,PLATAFORMAS DISPONIBLES ID,NOMBRE,DESARROLLADOR,GENERO,FECHA SALIDA,PLATAFORMAS DISPONIBLES
1,God of War: Ragnarok,Santa Monica Studio,Accion-Aventura-Lucha-Rol,09/11/2022,PS5 y PS4
2,FIFA 23,Electronic Arts,Deportes-Simulacion,27/09/2022,PS5-Nintendo Switch-XBOX y PC
3,Minecraft,Mojang Studios,Supervivencia-Sandbox,17/05/2009,PS-XBOX-Nintendo, Moviles y PC
4,Grand Theft Auto V,Rockstar Games,Mundo abierto,17/09/2013,PS-XBOX y PC
5,CounterStrike: Global Offensive,Valve Corporation,De disparos tactico,21/08/2012,XBOX y PC
6,Elden Ring,FromSoftware,Aventura-Mundo abierto,25/02/2022,PS-XBOX y PC
7,Uncharted 4,Naughty Dog,Accion-Aventura,10/05/2016,PS y PC
8,Ghost of Tsushima,Sucker Punch Productions,Rol-Sigilo-Accion-Aventura-Lucha,17/07/2020,PS5 y PS4
9,The Witcher 3,CD Projekt,Mundo abierto,19/05/2015,PS-NINTENDO-XBOX y PC
10,Assassins Creed: Origins,Ubisoft,Mundo abierto-Accion-Aventura-Sigilo,27/10/2017,PS-XBOX y PC
1,God of War: Ragnarok,Santa Monica Studio,Accion-Aventura-Lucha-Rol,09/11/2022,PS5-PS4
2,FIFA 23,Electronic Arts,Deportes-Simulacion,27/09/2022,PS5-Nintendo Switch-XBOX-PC
3,Minecraft,Mojang Studios,Supervivencia-Sandbox,17/05/2009,PS-XBOX-Nintendo-Moviles-PC
4,Grand Theft Auto V,Rockstar Games,Mundo abierto,17/09/2013,PS-XBOX-PC
5,CounterStrike: Global Offensive,Valve Corporation,De disparos tactico,21/08/2012,XBOX-PC
6,Elden Ring,FromSoftware,Aventura-Mundo abierto,25/02/2022,PS-XBOX-PC
7,Uncharted 4,Naughty Dog,Accion-Aventura,10/05/2016,PS-PC
8,Ghost of Tsushima,Sucker Punch Productions,Rol-Sigilo-Accion-Aventura-Lucha,17/07/2020,PS5-PS4
9,The Witcher 3,CD Projekt,Mundo abierto,19/05/2015,PS-NINTENDO-XBOX-PC
10,Assassins Creed: Origins,Ubisoft,Mundo abierto-Accion-Aventura-Sigilo,27/10/2017,PS-XBOX-PC

+ 25
- 13
src/main/resources/ayuda.txt View File

@ -1,41 +1,53 @@
Sintaxis: java -jar videogameadvisor.jar [OPCIONES] Sintaxis: java -jar videogameadvisor.jar [OPCIONES]
-l
Lista todos los videojuegos.
No se pueden utilizar más parámetros.
-lg -lg
Lista los diferentes géneros de videojuegos de la colección.
Lista los diferentes géneros de videojuegos.
No se pueden utilizar más parámetros.
-lp
Lista las diferentes plataformas de videojuegos.
No se pueden utilizar más parámetros. No se pueden utilizar más parámetros.
-ag genero1,genero2,genero...
-bg genero1,genero2,genero...
Lista aquellos videojuegos que pertenecen a al menos uno de los géneros Lista aquellos videojuegos que pertenecen a al menos uno de los géneros
que se indican. El listado de géneros no puede incluir espacios. que se indican. El listado de géneros no puede incluir espacios.
-tg genero1,genero2,genero...
Lista aquellos videojuegos 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
-ba año
Lista aquellos videojuegos que se estrenaron en el año indicado. Lista aquellos videojuegos que se estrenaron en el año indicado.
El año debe expresarse con 4 cifras. El año debe expresarse con 4 cifras.
-b desde,hasta
-bas desde,hasta
Lista aquellos videojuegos que se estrenaron entre los años DESDE y HASTA. Lista aquellos videojuegos que se estrenaron entre los años DESDE y HASTA.
Los años indicados están incluidos. Deben expresarse con 4 cifras. Los años indicados están incluidos. Deben expresarse con 4 cifras.
-t titulo
Lista aquellos videojuegos cuyo título contiene la cadena proporcionada.
-n nombre
Lista aquellos videojuegos cuyo nombre contiene la cadena proporcionada.
Se ignorará el uso de mayúsculas/minúsculas en la comparación.
-d desarrollador
Lista aquellos videojuegos cuyo desarrollador contiene la cadena proporcionada.
Se ignorará el uso de mayúsculas/minúsculas en la comparación. Se ignorará el uso de mayúsculas/minúsculas en la comparación.
-bp plataforma1,plataforma2,plataforma...
Lista aquellos videojuegos que pertenecen a al menos una de las plataformas
que se indican. El listado de plataformas no puede incluir espacios.
-h -h
Muestra este mensaje de ayuda. Muestra este mensaje de ayuda.
EJEMPLOS DE USO EJEMPLOS DE USO
java -jar videogameadvisor.jar -y 2018 -ag Accion,Rol
java -jar videogameadvisor.jar -ba 2018 -bg Accion,Rol
Muestra los videojuegos que han salido en el año 2018 y son de acción y/o de comedia. Muestra los videojuegos que han salido en el año 2018 y son de acción y/o de comedia.
java -jar videogameadvisor.jar -t war
java -jar videogameadvisor.jar -n war
Muestra los videojuegos cuyo título contiene la palabra war. Muestra los videojuegos cuyo título contiene la palabra war.
java -jar videogameadvisor.jar -td Accion,Aventura -b 2000,2010 -t auto
java -jar videogameadvisor.jar -bg Accion,Aventura -bas 2000,2010 -n auto
Muestra los videojuegos cuyo título contiene la palabra auto, pertenecen al Muestra los videojuegos cuyo título contiene la palabra auto, pertenecen al
género de acción y aventura y fueron estrenados entre 2000 y 2010. género de acción y aventura y fueron estrenados entre 2000 y 2010.


+ 1
- 1
target/classes/META-INF/maven/com.daniminguet.springcore/PracticaSpringCore/pom.properties View File

@ -1,5 +1,5 @@
#Generated by Maven Integration for Eclipse #Generated by Maven Integration for Eclipse
#Sat Nov 19 18:57:02 CET 2022
#Thu Nov 24 17:38:06 CET 2022
m2e.projectLocation=C\:\\Users\\Dani\\Documents\\workspace-spring-tool-suite-4-4.15.3.RELEASE\\PracticaSpringCore m2e.projectLocation=C\:\\Users\\Dani\\Documents\\workspace-spring-tool-suite-4-4.15.3.RELEASE\\PracticaSpringCore
m2e.projectName=PracticaSpringCore m2e.projectName=PracticaSpringCore
groupId=com.daniminguet.springcore groupId=com.daniminguet.springcore


+ 10
- 10
target/classes/VIDEOJUEGOS.csv View File

@ -1,11 +1,11 @@
ID,NOMBRE,DESARROLLADOR,GENERO,FECHA SALIDA,PLATAFORMAS DISPONIBLES ID,NOMBRE,DESARROLLADOR,GENERO,FECHA SALIDA,PLATAFORMAS DISPONIBLES
1,God of War: Ragnarok,Santa Monica Studio,Accion-Aventura-Lucha-Rol,09/11/2022,PS5 y PS4
2,FIFA 23,Electronic Arts,Deportes-Simulacion,27/09/2022,PS5-Nintendo Switch-XBOX y PC
3,Minecraft,Mojang Studios,Supervivencia-Sandbox,17/05/2009,PS-XBOX-Nintendo, Moviles y PC
4,Grand Theft Auto V,Rockstar Games,Mundo abierto,17/09/2013,PS-XBOX y PC
5,CounterStrike: Global Offensive,Valve Corporation,De disparos tactico,21/08/2012,XBOX y PC
6,Elden Ring,FromSoftware,Aventura-Mundo abierto,25/02/2022,PS-XBOX y PC
7,Uncharted 4,Naughty Dog,Accion-Aventura,10/05/2016,PS y PC
8,Ghost of Tsushima,Sucker Punch Productions,Rol-Sigilo-Accion-Aventura-Lucha,17/07/2020,PS5 y PS4
9,The Witcher 3,CD Projekt,Mundo abierto,19/05/2015,PS-NINTENDO-XBOX y PC
10,Assassins Creed: Origins,Ubisoft,Mundo abierto-Accion-Aventura-Sigilo,27/10/2017,PS-XBOX y PC
1,God of War: Ragnarok,Santa Monica Studio,Accion-Aventura-Lucha-Rol,09/11/2022,PS5-PS4
2,FIFA 23,Electronic Arts,Deportes-Simulacion,27/09/2022,PS5-Nintendo Switch-XBOX-PC
3,Minecraft,Mojang Studios,Supervivencia-Sandbox,17/05/2009,PS-XBOX-Nintendo-Moviles-PC
4,Grand Theft Auto V,Rockstar Games,Mundo abierto,17/09/2013,PS-XBOX-PC
5,CounterStrike: Global Offensive,Valve Corporation,De disparos tactico,21/08/2012,XBOX-PC
6,Elden Ring,FromSoftware,Aventura-Mundo abierto,25/02/2022,PS-XBOX-PC
7,Uncharted 4,Naughty Dog,Accion-Aventura,10/05/2016,PS-PC
8,Ghost of Tsushima,Sucker Punch Productions,Rol-Sigilo-Accion-Aventura-Lucha,17/07/2020,PS5-PS4
9,The Witcher 3,CD Projekt,Mundo abierto,19/05/2015,PS-NINTENDO-XBOX-PC
10,Assassins Creed: Origins,Ubisoft,Mundo abierto-Accion-Aventura-Sigilo,27/10/2017,PS-XBOX-PC

+ 25
- 13
target/classes/ayuda.txt View File

@ -1,41 +1,53 @@
Sintaxis: java -jar videogameadvisor.jar [OPCIONES] Sintaxis: java -jar videogameadvisor.jar [OPCIONES]
-l
Lista todos los videojuegos.
No se pueden utilizar más parámetros.
-lg -lg
Lista los diferentes géneros de videojuegos de la colección.
Lista los diferentes géneros de videojuegos.
No se pueden utilizar más parámetros.
-lp
Lista las diferentes plataformas de videojuegos.
No se pueden utilizar más parámetros. No se pueden utilizar más parámetros.
-ag genero1,genero2,genero...
-bg genero1,genero2,genero...
Lista aquellos videojuegos que pertenecen a al menos uno de los géneros Lista aquellos videojuegos que pertenecen a al menos uno de los géneros
que se indican. El listado de géneros no puede incluir espacios. que se indican. El listado de géneros no puede incluir espacios.
-tg genero1,genero2,genero...
Lista aquellos videojuegos 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
-ba año
Lista aquellos videojuegos que se estrenaron en el año indicado. Lista aquellos videojuegos que se estrenaron en el año indicado.
El año debe expresarse con 4 cifras. El año debe expresarse con 4 cifras.
-b desde,hasta
-bas desde,hasta
Lista aquellos videojuegos que se estrenaron entre los años DESDE y HASTA. Lista aquellos videojuegos que se estrenaron entre los años DESDE y HASTA.
Los años indicados están incluidos. Deben expresarse con 4 cifras. Los años indicados están incluidos. Deben expresarse con 4 cifras.
-t titulo
Lista aquellos videojuegos cuyo título contiene la cadena proporcionada.
-n nombre
Lista aquellos videojuegos cuyo nombre contiene la cadena proporcionada.
Se ignorará el uso de mayúsculas/minúsculas en la comparación.
-d desarrollador
Lista aquellos videojuegos cuyo desarrollador contiene la cadena proporcionada.
Se ignorará el uso de mayúsculas/minúsculas en la comparación. Se ignorará el uso de mayúsculas/minúsculas en la comparación.
-bp plataforma1,plataforma2,plataforma...
Lista aquellos videojuegos que pertenecen a al menos una de las plataformas
que se indican. El listado de plataformas no puede incluir espacios.
-h -h
Muestra este mensaje de ayuda. Muestra este mensaje de ayuda.
EJEMPLOS DE USO EJEMPLOS DE USO
java -jar videogameadvisor.jar -y 2018 -ag Accion,Rol
java -jar videogameadvisor.jar -ba 2018 -bg Accion,Rol
Muestra los videojuegos que han salido en el año 2018 y son de acción y/o de comedia. Muestra los videojuegos que han salido en el año 2018 y son de acción y/o de comedia.
java -jar videogameadvisor.jar -t war
java -jar videogameadvisor.jar -n war
Muestra los videojuegos cuyo título contiene la palabra war. Muestra los videojuegos cuyo título contiene la palabra war.
java -jar videogameadvisor.jar -td Accion,Aventura -b 2000,2010 -t auto
java -jar videogameadvisor.jar -bg Accion,Aventura -bas 2000,2010 -n auto
Muestra los videojuegos cuyo título contiene la palabra auto, pertenecen al Muestra los videojuegos cuyo título contiene la palabra auto, pertenecen al
género de acción y aventura y fueron estrenados entre 2000 y 2010. género de acción y aventura y fueron estrenados entre 2000 y 2010.


BIN
target/classes/com/daniminguet/videogameadvisor/VideogameAdvisorRunApp.class View File


BIN
target/classes/com/daniminguet/videogameadvisor/dao/UtilVideogameFileReader.class View File


BIN
target/classes/com/daniminguet/videogameadvisor/dao/VideogameDao.class View File


BIN
target/classes/com/daniminguet/videogameadvisor/dao/VideogameDaoImplMemory.class View File


BIN
target/classes/com/daniminguet/videogameadvisor/model/Videogame.class View File


BIN
target/classes/com/daniminguet/videogameadvisor/service/VideogameQueryService.class View File


BIN
target/classes/com/daniminguet/videogameadvisor/service/VideogameQueryServiceImpl.class View File


BIN
target/classes/com/daniminguet/videogameadvisor/service/VideogameService.class View File


Loading…
Cancel
Save