| @ -0,0 +1,69 @@ | |||||
| package com.cristobalbernal.loladvisor.dao; | |||||
| import com.cristobalbernal.loladvisor.config.AppConfig; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| 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> lol = new ArrayList<>(); | |||||
| @Autowired | |||||
| private AppConfig appConfig; | |||||
| @PostConstruct | |||||
| public void init() { | |||||
| lol = UtilLolFileReader.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator()); | |||||
| } | |||||
| public Lol findById(long id) { | |||||
| Optional<Lol> result = lol.stream().filter(vg -> vg.getId() == id).findFirst(); | |||||
| return result.orElse(null); | |||||
| } | |||||
| public Collection<Lol> findAll() { | |||||
| return lol; | |||||
| } | |||||
| public void insert(Lol videogame) { | |||||
| lol.add(videogame); | |||||
| } | |||||
| public void edit(Lol videogame) { | |||||
| int i = getIndexOf(videogame.getId()); | |||||
| if(i != -1) { | |||||
| lol.set(i, videogame); | |||||
| } | |||||
| } | |||||
| public void delete(long id) { | |||||
| int i = getIndexOf(id); | |||||
| if(i != -1) { | |||||
| lol.remove(i); | |||||
| } | |||||
| } | |||||
| private int getIndexOf(long id) { | |||||
| boolean founds = false; | |||||
| int i = 0; | |||||
| while(!founds && i < lol.size()) { | |||||
| if(lol.get(i).getId() == id) { | |||||
| founds = true; | |||||
| } else { | |||||
| i++; | |||||
| } | |||||
| } | |||||
| return (founds) ? i : -1; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,35 @@ | |||||
| 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<Lol>(); | |||||
| 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[3].split(listSeparator)), 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; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,11 @@ | |||||
| package com.cristobalbernal.loladvisor.service; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import java.util.Collection; | |||||
| public interface LolQueryService { | |||||
| public Collection<Lol> exec(); | |||||
| public LolQueryService anyName(String... name); | |||||
| public LolQueryService allName(String... name); | |||||
| public LolQueryService titleContains(String title); | |||||
| } | |||||
| @ -0,0 +1,57 @@ | |||||
| package com.cristobalbernal.loladvisor.service; | |||||
| import com.cristobalbernal.loladvisor.dao.LolDao; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | |||||
| import javax.annotation.PostConstruct; | |||||
| import java.util.Arrays; | |||||
| import java.util.Collection; | |||||
| import java.util.function.Predicate; | |||||
| import java.util.stream.Collectors; | |||||
| @Service | |||||
| public class LolQueryServiceImpl implements LolQueryService { | |||||
| @Autowired | |||||
| private LolDao dao; | |||||
| private Predicate<Lol> predicate; | |||||
| @PostConstruct | |||||
| public void init() { | |||||
| predicate = null; | |||||
| } | |||||
| @Override | |||||
| public Collection<Lol> exec() { | |||||
| //@formatter:off | |||||
| return dao.findAll() | |||||
| .stream() | |||||
| .filter(predicate) | |||||
| .collect(Collectors.toList()); | |||||
| //@formatter:on | |||||
| } | |||||
| @Override | |||||
| public LolQueryService anyName(String... name) { | |||||
| Predicate<Lol> pAnyGenre = (vg -> Arrays.stream(name).anyMatch(vg.getNombre()::contains)); | |||||
| predicate = (predicate == null) ? pAnyGenre : predicate.and(pAnyGenre); | |||||
| return this; | |||||
| } | |||||
| @Override | |||||
| public LolQueryService allName(String... name) { | |||||
| Predicate<Lol> pAllGenre = (vg -> Arrays.stream(name).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; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,51 @@ | |||||
| package com.cristobalbernal.loladvisor.service; | |||||
| import com.cristobalbernal.loladvisor.dao.LolDao; | |||||
| import com.cristobalbernal.loladvisor.model.Lol; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | |||||
| import java.util.Collection; | |||||
| import java.util.List; | |||||
| import java.util.stream.Collectors; | |||||
| @Service | |||||
| public class LolService { | |||||
| @Autowired | |||||
| LolDao lolDao; | |||||
| @Autowired | |||||
| LolQueryService queryService; | |||||
| public Collection<String> findAllRol() { | |||||
| List<String> result = null; | |||||
| result = lolDao.findAll() | |||||
| .stream() | |||||
| .map(vg -> vg.getRol()) | |||||
| .flatMap(list -> list.stream()) | |||||
| .distinct() | |||||
| .sorted() | |||||
| .collect(Collectors.toList()); | |||||
| // @formatter:on | |||||
| return result; | |||||
| } | |||||
| public Collection<Lol> findByAnyGenre(String... genres) { | |||||
| return queryService.anyName(genres).exec(); | |||||
| } | |||||
| public Collection<Lol> findByAllGenres(String... genres) { | |||||
| return queryService.allName(genres).exec(); | |||||
| } | |||||
| public Collection<Lol> findByTitleContains(String title) { | |||||
| return queryService.titleContains(title).exec(); | |||||
| } | |||||
| public Collection<Lol> findAll() { | |||||
| return lolDao.findAll(); | |||||
| } | |||||
| } | |||||