| @ -1,13 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor; | |||||
| import org.springframework.boot.SpringApplication; | |||||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | |||||
| @SpringBootApplication | |||||
| public class LolAdvisorApplication { | |||||
| public static void main(String[] args) { | |||||
| SpringApplication.run(LolAdvisorApplication.class, args); | |||||
| } | |||||
| } | |||||
| @ -1,33 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor.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.cristobalbernal") | |||||
| @PropertySource("classpath:/application.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; | |||||
| } | |||||
| } | |||||
| @ -1,13 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor.dao; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import java.util.Collection; | |||||
| public interface LolDao { | |||||
| public Lol findById(long id); | |||||
| public Collection<Lol> findAll(); | |||||
| public void insert(Lol lol); | |||||
| public void edit(Lol lol); | |||||
| public void delete(long id); | |||||
| } | |||||
| @ -1,76 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor.dao; | |||||
| import com.cristobalbernal.loladvisor.config.AppConfig; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import org.springframework.stereotype.Repository; | |||||
| import javax.annotation.PostConstruct; | |||||
| import java.util.ArrayList; | |||||
| import java.util.Collection; | |||||
| import java.util.List; | |||||
| import java.util.Optional; | |||||
| @Repository | |||||
| public class LolDaoImplMemory implements LolDao{ | |||||
| public List<Lol> lols = new ArrayList<>(); | |||||
| private AppConfig appConfig; | |||||
| public void init() { | |||||
| lols = UtilLolFileReader.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator()); | |||||
| } | |||||
| @Override | |||||
| public Lol findById(long id) { | |||||
| Optional<Lol> result = lols | |||||
| .stream() | |||||
| .filter(f -> f.getId() == id) | |||||
| .findFirst(); | |||||
| // @formatter:on | |||||
| return result.orElse(null); | |||||
| } | |||||
| @Override | |||||
| public Collection<Lol> findAll() { | |||||
| return lols; | |||||
| } | |||||
| @Override | |||||
| public void insert(Lol lol) { | |||||
| lols.add(lol); | |||||
| } | |||||
| @Override | |||||
| public void edit(Lol lol) { | |||||
| int i = getIndexOf(lol.getId()); | |||||
| if(i != -1) | |||||
| lols.set(i, lol); | |||||
| } | |||||
| @Override | |||||
| public void delete(long id) { | |||||
| int index = getIndexOf(id); | |||||
| if(index != -1) | |||||
| lols.remove(index); | |||||
| } | |||||
| private int getIndexOf(long id) { | |||||
| boolean encontrado = false; | |||||
| int index = 0; | |||||
| while(!encontrado && index < lols.size()) { | |||||
| if(lols.get(index).getId() == id){ | |||||
| encontrado = true; | |||||
| } else{ | |||||
| index++; | |||||
| } | |||||
| } | |||||
| return (encontrado) ? index : -1; | |||||
| } | |||||
| } | |||||
| @ -1,38 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor.dao; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import org.springframework.util.ResourceUtils; | |||||
| 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; | |||||
| public class UtilLolFileReader { | |||||
| public static List<Lol> readFile(final String path, final String separator, final String listSeparator) { | |||||
| List<Lol> result = new ArrayList<>(); | |||||
| try { | |||||
| // @formatter:off | |||||
| result = Files | |||||
| .lines(Paths.get(ResourceUtils.getFile(path).toURI())) | |||||
| .skip(1) | |||||
| .map(line -> { | |||||
| String[] values = line.split(separator); | |||||
| return new Lol(Long.parseLong(values[0]), values[1], | |||||
| Arrays.asList(values[2].split(listSeparator)), | |||||
| values[3],values[4]); | |||||
| }).collect(Collectors.toList()); | |||||
| // @formatter:on | |||||
| } catch (Exception e) { | |||||
| System.err.println("Error de lectura del fichero de datos"); | |||||
| System.exit(-1); | |||||
| } | |||||
| return result; | |||||
| } | |||||
| } | |||||
| @ -1,68 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor.model; | |||||
| import java.util.List; | |||||
| public class Lol { | |||||
| private long id; | |||||
| private String nombre; | |||||
| private List<String> rol; | |||||
| private String dificultad; | |||||
| private String genero; | |||||
| public Lol(long id, String nombre, List<String> rol, String dificultad, String genero) { | |||||
| this.id = id; | |||||
| this.nombre = nombre; | |||||
| this.rol = rol; | |||||
| this.dificultad = dificultad; | |||||
| this.genero = genero; | |||||
| } | |||||
| public long getId() { | |||||
| return id; | |||||
| } | |||||
| public String getNombre() { | |||||
| return nombre; | |||||
| } | |||||
| public String getDificultad() { | |||||
| return dificultad; | |||||
| } | |||||
| public void setId(long id) { | |||||
| this.id = id; | |||||
| } | |||||
| public void setNombre(String nombre) { | |||||
| this.nombre = nombre; | |||||
| } | |||||
| public List<String> getRol() { | |||||
| return rol; | |||||
| } | |||||
| public void setRol(List<String> rol) { | |||||
| this.rol = rol; | |||||
| } | |||||
| public void setDificultad(String dificultad) { | |||||
| this.dificultad = dificultad; | |||||
| } | |||||
| public String getGenero() { | |||||
| return genero; | |||||
| } | |||||
| public void setGenero(String genero) { | |||||
| this.genero = genero; | |||||
| } | |||||
| @Override | |||||
| public String toString() { | |||||
| return "Lol{" + | |||||
| "id=" + id + | |||||
| ", nombre='" + nombre + '\'' + | |||||
| ", rol=" + rol + | |||||
| ", dificultad='" + dificultad + '\'' + | |||||
| ", genero='" + genero + '\'' + | |||||
| '}'; | |||||
| } | |||||
| } | |||||
| @ -1,13 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor.service; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import java.util.Collection; | |||||
| public interface LolQueryService { | |||||
| public Collection<Lol> exec(); | |||||
| public LolQueryService anyGenre(String... genres); | |||||
| public LolQueryService allGenres(String... genres); | |||||
| public LolQueryService titleContains(String title); | |||||
| } | |||||
| @ -1,47 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor.service; | |||||
| import com.cristobalbernal.loladvisor.dao.LolDao; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import org.springframework.stereotype.Service; | |||||
| import java.util.Arrays; | |||||
| import java.util.Collection; | |||||
| import java.util.function.Predicate; | |||||
| import java.util.stream.Collectors; | |||||
| @Service | |||||
| public class LolQueryServices implements LolQueryService { | |||||
| private LolDao dao; | |||||
| private Predicate<Lol> predicate; | |||||
| @Override | |||||
| public Collection<Lol> exec() { | |||||
| return dao.findAll() | |||||
| .stream() | |||||
| .filter(predicate) | |||||
| .collect(Collectors.toList()); | |||||
| } | |||||
| @Override | |||||
| public LolQueryService anyGenre(String... genres) { | |||||
| Predicate<Lol> pAnyGenre = (vg -> Arrays.stream(genres).anyMatch(vg.getNombre()::contains)); | |||||
| predicate = (predicate == null) ? pAnyGenre : predicate.and(pAnyGenre); | |||||
| return this; | |||||
| } | |||||
| @Override | |||||
| public LolQueryService allGenres(String... genres) { | |||||
| Predicate<Lol> pAllGenre = (vg -> Arrays.stream(genres).allMatch(vg.getNombre()::contains)); | |||||
| predicate = (predicate == null) ? pAllGenre : predicate.and(pAllGenre); | |||||
| return this; | |||||
| } | |||||
| @Override | |||||
| public LolQueryService titleContains(String title) { | |||||
| Predicate<Lol> pTitleContains = (vg -> vg.getNombre().toLowerCase().contains(title.toLowerCase())); | |||||
| predicate = (predicate == null) ? pTitleContains : predicate.and(pTitleContains); | |||||
| return this; | |||||
| } | |||||
| } | |||||
| @ -1,17 +0,0 @@ | |||||
| package com.cristobalbernal.loladvisor.service; | |||||
| import com.cristobalbernal.loladvisor.dao.LolDao; | |||||
| import java.util.Collection; | |||||
| public class LolService { | |||||
| LolDao filmDao; | |||||
| LolQueryService queryService; | |||||
| public Collection<String> findAllGenres(){ | |||||
| return null; | |||||
| } | |||||
| } | |||||